プログラム言語 データ型

変数(データ型)宣言

型推論(objectåž‹ã§ã¯ãªã„)
var i = 5;
i="5" →エラー
型推論を利用ã—ãŸå¤‰æ•°å®£è¨€ã§ã¯åŒæ™‚ã«ã«åˆæœŸåŒ–ãŒå¿…è¦ã§ã€åˆæœŸåŒ–時ã®åž‹ä»¥å¤–ã®åž‹ã‚’æ ¼ç´ã§ããªã„。
型推論を利用ã—ãŸã‚¯ãƒ©ã‚¹ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åŒ–ã¯ã€Œã‚ªãƒ–ジェクト指å‘: クラス/インスタンス化ã€å‚ç…§

int i = 5;
string i = '5';
object i = 5;

private int i = 5;
public string i = ‘5’;
protected object i = 5;

Dim i As Integer = 5
Dim i As String = '5'
Dim i As object = 5

Private i As Integer = 5
Public i As String = '5'
Protected i As object = 5

int i,j,k;
int i = 100;

//variantåž‹
var i = 5;

//宣言ãªã—ã§ã®ä½¿ç”¨ã‚‚å¯(éžæŽ¨å¥¨)
i = "5";

// 関数も格ç´ã§ãる。
i = function(){ ~ };
// 関数ã®å®Ÿè¡Œã€‚
i;

宣言無ã—ã§ä½¿ç”¨å¯
型定義無ã—(型推論ï¼åˆæœŸå€¤ã«å¿œã˜ã¦è‡ªå‹•çš„ã«å®šç¾©ã•れる)
$i = "5";
$i = 5;

変数ã®åˆæœŸåŒ–
unset($i);
print $i;
→(何も表示ã•れãªã„)

my $X;
my $y = "bbb";
my @z = (c,c,c);

//宣言ãªã—ã§ã®ä½¿ç”¨ã‚‚å¯(éžæŽ¨å¥¨)
$yy = "bbb";

宣言無ã—ã§ä½¿ç”¨å¯
型定義無ã—(型推論ï¼åˆæœŸå€¤ã«å¿œã˜ã¦è‡ªå‹•çš„ã«å®šç¾©ã•れる)
i="5";
i=5;
=ã®å‰å¾Œã« ã‚’入れãªã„

読å–専用
readonly i=~;

変数削除
unset i

変数ã®å‚ç…§
echo $i
echo {$i}

æ¨™æº–å‡ºåŠ›çµæžœã‚’代入
$i=`~`
「`ã€ã¯SHIFT+@
例 $i=`ls`

データ型一覧

種類 例 æ ¼ç´å…ˆ
・基本型
(値型ã€ãƒ—リミティブ型)
・論ç†åž‹(boolean)
・文字型(char)
・整数型(shortã€intã€long)
ãƒ»å°æ•°ç‚¹åž‹(floatã€double)
・空型(void)
・構造体
・列挙体
スタック領域
å‚ç…§åž‹
(オブジェクト型)
・文字列型(String ※言語ã«ã‚ˆã‚‹)
・é…列
・クラス
・インターフェイス
・デリゲート
ヒープ領域

String name1 = "Hello";
String name2 = new String("Hello");
※文字列ã®å€¤ãŒç­‰ã—ã„ã‹ï¼Ÿ
boolean blnRet = name1.equals(name2);
⇒ blnRet : true
※å‚照値ãŒç­‰ã—ã„ã‹ï¼Ÿ
boolean blnRet = (name1 == name2);
⇒ blnRet : false
「文字列型ã®å‚ç…§/値型ã¨å‚ç…§åž‹ã€å‚ç…§

signed ~ 符å·(+-)有。デフォルト:有
unsigned ~

signed short int -32,768 ~ 32,767
unsigned short int 0 ~ 65,535
short int -32,678 ~ 32,767
int -2,147,486,948 ~ 2,147,483,647

__int8 my_Int1 = -128;
__int8 my_Int2 = -129;
// my_Int2:127


unsigned __int8 my_Int3 = 255;
unsigned __int8 my_Int4 = 256;
// my_Int4:0

unsigned __int8 my_Int5 = -1;
// my_Int5:255


char myChar1 = 'a';
char myChar2 = 'aa';
// myChar2:'a'


signed char myChar3 = -128;
signed char myChar4 = -129;
// myChar4:127

signed char myChar5 = 127;
signed char myChar6 = 128;
// myChar6:-128


unsigned char myChar7 = 255;
unsigned char myChar8 = 256;
// myChar8:0

unsigned char myChar9 = -1;
// myChar9:255


wchar_t myWcharT1 = 'aaa';
wchar_t myWcharT2 = '西';
wchar_t myWcharT3 = '西宮';

bool myBool1 = true;
bool myBool2 = -1;
// myBool2:true

データ型 コード 備考
è«–ç†å€¤ï¼ˆè«–ç†åž‹ï¼‰ boolean
整数(整数型) integer
æµ®å‹•å°æ•°ç‚¹æ•°(æµ®å‹•å°æ•°ç‚¹åž‹) float(double)
文字列 string
é…列 array
ヌル値 NULL
オブジェクト object
リソース resource
データ型 コード 備考
è«–ç†å€¤ï¼ˆè«–ç†åž‹ï¼‰ boolean
ヌル値 NULL
未定義 Undefined
æ•´æ•°ï¼ˆæ•´æ•°åž‹ï¼‰ã€æµ®å‹•å°æ•°ç‚¹æ•°(æµ®å‹•å°æ•°ç‚¹åž‹) Number 他言語ã§ã¯ä¸€èˆ¬çš„ã«Integerã€floatç­‰
整数(整数型) BigInt
文字列 String
シンボル Symbol
オブジェクト object

データ型別å

unsigned long int i = 1000000000;

typedef unsigned long int newInt;
newInt n = i;

å°†æ¥çš„ã«ãƒ‡ãƒ¼ã‚¿åž‹ã‚’変更ã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹å ´åˆã€
別å型を使用ã—ã¦ãŠãã¨ã€ä¸€ã‚«æ‰€ã®å¤‰æ›´ã§å…¨ã¦ã®åˆ¥ååž‹ã®ãƒ‡ãƒ¼ã‚¿åž‹ã‚’変更ã§ãる。

真/å½

真å½ã«å½“ãŸã‚‹åž‹ã‚„組ã¿è¾¼ã¿å¤‰æ•°ã¯ãªã„。
真å½ã¯ä»¥ä¸‹ã§è¡¨ç¾ã™ã‚‹ã€‚

false
'0' #文字列ã¨ã—ã¦ã®'0'
'' #Null文字列
"" #Null文字列
未定義

my $str;
if($str){
  print "未定義","\n";
}elseif($str eq "aaa"){
  ~
}

true
my $str = 0;
if ($str){
  print "定義済ã¿","\n";
}

æ–‡å­—åž‹ã€æ–‡å­—列型

「プログラム言語 データ型:文字型・文字列型ã€å‚ç…§

C#ã€JAVAã«ãŠã‘ã‚‹æ–‡å­—åˆ—åž‹ã®æŒ™å‹•ã«ã¤ã„ã¦ã¯ã€ã€Œæ–‡å­—列型ã®å‚ç…§ã€å‚ç…§

固定ã®å€¤

定数/固定値

ã€å®šæ•°ã€‘:プリプロセッサã«ã‚ˆã‚Šã€ã‚³ãƒ³ãƒ‘イルå‰ã«ç½®ãæ›ãˆã‚‰ã‚Œã‚‹ã€‚
データ型ã¯è‡ªå‹•判別ã•れる。

オブジェクト型マクロ定数
#define DEF_NUM (5)
#define DEF_STR ("AAA")

関数型マクロ定数
#define DEF_FUNC(a) ( (DEF_NUM + a) )

Console::WriteLine(DEF_NUM);
→ 5
Console::WriteLine(DEF_STR);
→ AAA
Console::WriteLine(DEF_FUNC(10));
→ 15

ã€å›ºå®šå€¤ã€‘
const int CONST_MYINT = 5;
const string CONST_MYSTR = "AAA";

CONST_MYINT = 10;
// エラー

※関数ãƒã‚¤ãƒ³ã‚¿ã«ãŠã„ã¦ãƒ¡ãƒ¢ãƒªã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’変更ã•れãŸããªã„å ´åˆã®ä½¿ã„æ–¹
void myFunc(const int *prm){}

define("CONST_TEISUU", "定数");

print CONST_TEISUU;
→定数

列挙体(enum)

enum enmTest1
{
  enum1,
  enum2,
  enum3
}

enum enmTest2
{
  enum1 = 1,
  enum2 = 2,
  enum3 = 3
}

enum enmTest3
{
  enum1 = "1",
  enum2 = "2",
  enum3 = "3"
}

public void myForm_Load(object sender, EventArgs e)
{
  SubRoutine(test1: enmTest1.enum1,
         test2: enmTest2.enum1,
         test3: enmTest3.enum3);
}

private void SubRoutine(enmTest1 test1,
             enmTest2 test2,
             enmTest3 test3)
{
 ~
}

Private Enum enmTest1
  enum1
  enum2
  enum3
End Enum

Private Enum enmTest2
  enum1 = 1
  enum2 = 2
  enum3 = 3
End Enum

VBã§ã¯æ–‡å­—列を設定ã™ã‚‹äº‹ã¯ã§ããªã„

Private Enum enmTest3
  enum1 = "1"
  enum2 = "2"
  enum3 = "3"
End Enum


Private Sub myForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load

  Call SubRoutine(test1:=enmTest1.enum1, _
              test2:=enmTest2.enum1)

End Sub

Private Sub SubRoutine(ByVal test1 As enmTest1, _
                  ByVal test2 As enmTest2)
 ~
End Sub

enum myEnum
{
  value1 = 0,
  value2 = 1,
  value3
};

int myInt = myEnum::value1;
※intåž‹å¤‰æ•°ã¸æ ¼ç´å¯èƒ½

Console::WriteLine(myInt);
// ⇒0
return 0;

package myPackage;

public class MyEnum {
 public enum VALUE{
  VAL1,
  VAL2,
  VAL3
 }
}

import static myPackage.MyEnum.VALUE.*;

public class MyMain {
 public static void main(String[] args) {
  int intVal1 = VAL1.ordinal();
  自動的ã«ä½¿ç”¨ã§ãるメソッド(正確ã«ã¯MyEnumãŒè‡ªå‹•çš„ã«ç¶™æ‰¿ã™ã‚‹enumクラスã®ãƒ¡ã‚½ãƒƒãƒ‰)
  → 0
  String strVal1 = VAL1.name();
  自動的ã«ä½¿ç”¨ã§ãるメソッド(正確ã«ã¯MyEnumãŒè‡ªå‹•çš„ã«ç¶™æ‰¿ã™ã‚‹enumクラスã®ãƒ¡ã‚½ãƒƒãƒ‰)
  → VAL1
 }
}

ã€ç‹¬è‡ªãƒ¡ã‚½ãƒƒãƒ‰ã‚’定義】
package myPackage;

public class MyEnum {
 public enum custEnum{
  intVAL1(1, "name1"),
  intVAL2(2, "name2"),
  intVAL3(3, "name3"); â†!
  メソッドを作æˆã™ã‚‹å ´åˆã¯ã€Œ;ã€ã§çµ‚ã‚ã‚‹
  下部ã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã‚’呼ã³å‡ºã™

  
  private final int index;
  private final String name;
  セッターを作æˆã—ãªã„å ´åˆã¯ã€Œfinalã€
  
  内部ã‹ã‚‰ã®ã¿å‘¼ã³å‡ºã•れるコンストラクタ

  custEnum(int index, String name){
   this.index = index;
   this.name = name;
  }
  外部ã‹ã‚‰å‘¼ã³å‡ºã•れるメソッド

  public int getIndex() {
   return this.index;
  }
  外部ã‹ã‚‰å‘¼ã³å‡ºã•れるメソッド

  public String getMyName() {
   return this.name;
  }
 }
}

import static myPackage.MyEnum.custEnum.*;

public class MyMain {
 public static void main(String[] args) {
  int intVal = VAL1.getIndex();
  → 1

  intVal = VAL1.ordinal(); も○
  → 0

  
  String strVal = VAL1.getMyName();
  → name1

  strVal = VAL1.name(); も○
  → Val1

 }
}

var enmState = {
  Stop: 0,
  Moving: 1,
  End: 2
};
var gState = enmState.Stop;
const INDEX = [
  'IDX1' => 0,
  'IDX2' => 1,
  'IDX3' => 2,
];

$ary = ['php', 'java', 'C#',];
echo $ary[INDEX['IDX1']];
→php

リテラル

ソースコードã«ç›´æŽ¥è¨˜è¿°ã•れãŸå¤‰æ•°ã€å®šæ•°ä»¥å¤–ã®å€¤ã€‚
リテラル領域ã¨ã„ã†å¤‰æ•°ç­‰ã¨ã¯ç•°ãªã‚‹ãƒ¡ãƒ¢ãƒªé ˜åŸŸã«ä½œæˆã•れる。
(C#ã€JAVAã«ãŠã‘るリテラル値ã®å‚ç…§ã«ã¤ã„ã¦ã¯ã€ã€Œæ–‡å­—列型ã®å‚ç…§ã€å‚ç…§)
文字列リテラルを記述ã™ã‚‹å ´åˆã¯ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—処ç†ã®é˜²æ­¢ã‚’考慮ã™ã‚‹å¿…è¦ãŒã‚る。
(「エスケープã€å‚ç…§)

Console.WriteLine("C:\test\test.txt");
//⇒ C:    est    est.txt
//⇒ C:[tab]est[tab]est.txt
タブ入力をæ„味ã™ã‚‹ç‰¹æ®Šæ–‡å­—「\tã€ã¨è¦‹ãªã•れã¦ã„る。

Console.WriteLine(@"C:\test\test.txt");
//⇒ C:\test\test.txt
「@ã€ã‚’付ã‘ã‚‹ã¨ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—処ç†ã•れãªã„。

Console.WriteLine("C:\\test\\test.txt");
//⇒ C:\test\test.txt

「@ã€ã‚’付ã‘ãªã„å ´åˆã€‚
「\ã€ã®å‰ã«æ›´ã«ã€Œ\ã€ã‚’付ã‘る。

リテラル
String myStr = "5"; //文字列リテラル
int myInt = 5; //整数リテラル
double myDoublt = 5.0; //æµ®å‹•å°æ•°ç‚¹ãƒªãƒ†ãƒ©ãƒ«
Boolean myBool = true; //真å½ãƒªãƒ†ãƒ©ãƒ«

リテラルã«ãŠã‘ã‚‹åž‹ã®æ˜Žç¤º(接尾辞)
long myLong = 5L(ã¾ãŸã¯5.0l);
⇒ myLong : 5
float myFloat = 5F(ã¾ãŸã¯5f);
⇒ myFloat : 5.0

int myInt = 10F; ⇒エラー

整数リテラルã®ä»–基数表示
int myInt = 10; //10進数
int myInt = 010; //8進数
int myInt = 0x10; //16進数
int myInt = 0b10; //2進数

「_ã€(アンダースコア)
整数リテラルを読ã¿ã‚„ã™ãã™ã‚‹ç‚ºã®è¨˜å·
int a = 123_456_789;

使用ルール
・リテラルã®å…ˆé ­ã¨æœ«å°¾ã«ã¯è¨˜è¿°ã§ããªã„
・記å·ã®å‰å¾Œã«ã¯è¨˜è¿°ã§ããªã„

echo関数ã«ã‚ˆã‚‹æ–‡å­—列ã®å‡ºåŠ›
<?php
 echo "aaaaa<br />\n";
 echo "bbbbb<br />\n";
 ↓ リテラルã¸ã®php変数ã®åŸ‹ã‚è¾¼ã¿
 「プログラム言語 標準関数(テキスト系)/ãƒã‚¤ãƒ³ãƒ‰(埋ã‚è¾¼ã¿)ã€å‚ç…§
?>

html文字中ã¸php埋ã‚è¾¼ã¿
<p>
 aaaaa<br />
 bbbbb<br />
 ccc<?php echo $purpose; ?>ccc<br />
 <a href="test.php">ddd<a>
</p>

ヒアドキュメント
\nç„¡ã—ã§æ”¹è¡Œã€ç‰¹æ®Šæ–‡å­—ã®ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ä¸è¦
<<< ãŒãƒ’アドキュメントã®é–‹å§‹åˆå›³
<<< ã®æ¬¡ã«æ›¸ã„ãŸæ–‡å­—ãŒå†åº¦å‡ºç¾ã™ã‚‹ã¾ã§å…¨ã¦å‡ºåŠ›ã•れる

<p>
 <?php
  $purpose = "ppp";
  
  echo <<< HERE
  aaaaa<br />
  bbbbb<br />
  ↓ リテラルã¸ã®php変数ã®åŸ‹ã‚è¾¼ã¿
  ccc{$purpose}ccc<br />
  <a href="test.php">ddd<a>
  HERE;
 ?>
</p>

çµæžœ
aaaaa
bbbbb
cccpppccc
ddd

Objectåž‹

<div id="hoge">~</div>

JavaScript
var hoge = document.getElementById('hoge');
hoge.~ = ~

jQuery
var hoge = $("#hoge").get(0);
var hoge = $("#hoge")[0];
hoge.~ = ~

å…¨ã¦ã®åž‹(class)ã¯Objectクラスを継承ã—ã¦ã„る為ã€
Objectクラスã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯å…¨ã‚¯ãƒ©ã‚¹ã§ä½¿ç”¨å¯èƒ½ã€‚
「オブジェクト指å‘: ãƒãƒªãƒ¢ãƒ¼ãƒ•ィズム/型情報ã€å‚ç…§

構造体

構造体:値型
クラス:å‚ç…§åž‹

struct MyStruct
{
 public int myInt;
 public string myStr;
 
 public MyStruct(int prmInt, string prmStr)
 {
  this.myInt = prmInt;
  this.myStr = prmStr;
 }
 public int fnPlus() { return this.myInt * 2; }
 public string fnPlus(string prm) { return this.myStr + prm; }
}

class Program
{
 static void Main(string[] args)
 {
  int retInt;
  string retStr;
  
  MyStruct m1 = new MyStruct();
  retInt = m1.fnPlus();
  retInt:0
  retStr = m1.fnPlus(prm: @"bbb");
  retStr:bbb
  デフォルトコンストラクタãŒå‘¼ã°ã‚Œã‚‹ã¨å¤‰æ•°ã®ãƒ‡ãƒ•ォルト値ã§åˆæœŸåŒ–ã•れる(int:0ã€string:null)
  
  MyStruct m2 = new MyStruct(prmInt: 10, prmStr: @"aaa");
  retInt = m2.fnPlus();
  retInt:20
  retStr = m2.fnPlus(prm: @"bbb");
  retStr:aaabbb
  
  MyStruct m3;
  retInt = m3.myInt; コンパイルエラー
  retStr = m3.myStr; コンパイルエラー

 }
}

int main(array<System::String ^> ^args)
{
  struct person
  {
    char *name;
    int age;
  };
  
  person p;
  p.age = 36;
  Console::WriteLine(p.age);
  
  return 0;
}

※構造体定義ã«ç¶šã„ã¦å¤‰æ•°å®šç¾©
int main(array<System::String ^> ^args)
{
  struct person
  {
    char *name;
    int age;
  } p;
  
  p.age = 36;
  Console::WriteLine(p.age);
  
  return 0;
}

Private Type tpType
 A As Integer
 B As String
End Type

Dim myType() As tpType
ReDim myType(5)

Dim i As Integer
For i = 0 To UBound(myType) ※i=0To5
 myType(i).A = i
 myType(i).B = "B"
Next i

部分型

ã‚¯ãƒ©ã‚¹ã€æ§‹é€ ä½“ã«ã¤ã„ã¦è¨˜è¿°ã‚’分割ã§ãる。
別ファイルã¸ã®è¨˜è¿°ã‚‚å¯ã€‚
å¤§è¦æ¨¡é–‹ç™ºæ™‚ç­‰ã«åˆ©ç”¨ã•れる。

public partial class MyClass
{
 private int _member1 { get; set;}
}

public partial class MyClass
{
 private int _member2 { get; set; }
}

public partial class MyClass
{
 public MyClass(int mem1, int mem2)
 {
  this._member1 = mem1;
  this._member2 = mem2;
 }
 public int retPlus()
 {
  return this._member1 + this._member2;
 }
}

public partial class _Default : Page
{
 protected void Page_Load(object sender, EventArgs e)
 {
  MyClass myClass = new MyClass(mem1:5, mem2:10);
  int ret = myClass.retPlus();
  ret:15
 }
}

型判定

#英字判定
print('abc'.isalpha()) #true
print('abcABC'.isalpha()) #true
print('abc123'.isalpha()) #false
print('abc abc'.isalpha()) #false

#数字判定
print('123'.isnumeric()) #true
print('123'.isnumeric()) #true
print('â…£'.isnumeric()) #true isdecimal()ã ã¨false
print('å››'.isnumeric()) #true isdigit()ã€isdecimal()ã ã¨false
print('123 '.isnumeric()) #false
print('123abc'.isnumeric()) #false

#英数字判定
print('123abc'.isalnum()) #true
print('123ABC'.isalnum()) #true
print('â…£'.isalnum()) #true
print('å››'.isalnum()) #true
print('123 '.isalnum()) #false

NULL判定

プログラム言語 標準関数(テキスト系)/Null判定å‚ç…§

Follow me!