無料の開発環境 Delphi Starter Edition で Object Pascal言語を優しく学ぶ 第2回 「変数と型」

#Delphi Starter Edition チュートリアルシリーズ シーズン2 第2回 「変数と型」
![image](https://qiita-image-store.s3.amazonaws.com/0/145847/0789981d-374b-25ef-ccd3-0d65ff5946ac.png)

2017年1月23日より 「Delphi / C++Builder Starter チュートリアルシリーズ」 シーズン2、全9回、3月27日まで、毎週月曜日、Delphiパートが 17時00分~17時20分、 リアルタイム放送スペシャルコンテンツが5分～10分、C++Builderパートが 17時30分~17時50分の時間割でお送りしています。

無料でダウンロード&利用できる開発環境の[Delphi / C++Builder Starter エディション](https://community.embarcadero.com/my-blog-posts?view=entry&id=8915)を使用して、プログラミング言語のDelphi (Object Pascal ), C++の基礎を学ぶオンラインセッションです。

##使用したスライドなどの情報を掲載します。
###Webセミナースライド
当セミナーのスライドは下記アドレスよりご参照いただけます。
http://www.slideshare.net/ssuser194f49/delphi-cbuilder-starter-2-delphi-2

###アジェンダ
* ねらい
  * 変数とは何か、型とは何かを知る
  * 変数と型の使い方を知る
* 実施内容
  * 変数とデータ型の宣言
  * 変数とデータ型の宣言場所と影響範囲
  * 変数とデータ型の使用
  * 演算子とは
  * キャストと型変換

###開発環境インストール
[Delphi / C++Builder Starter チュートリアルシリーズ](https://community.embarcadero.com/manage-blog-posts?view=entry&id=9038) シーズン1 第1回 ‟無料で始めよう アプリ作成„をご参考になり、開発環境をインストールしてください。


##**以下、Delphi Webセミナーの本筋**
###変数と型
* **型（データ型）**
: どんな種類のデータを入れるかを決めてある形
数値なのか、文字なのか。これらの複合である場合もある
* **変数**
: データを記憶・保存（代入）させておく、識別子を持った 入れ物
どんなデータ型を使用するか決めて、名前（識別子）を付けて使用する

**Delphiはプログラム内で使用する変数をvar ブロックで宣言して使用**します

###データ型
主要（よく使う）データ型の一例

* 整数データ型
  * 整数（数値）を入れる
  * Integer, Uint64 …
<br><p></p>
* 浮動小数点データ型
  * 小数点を含む数値を入れる
  * Single, Double, Extended ...
<br><p></p>
* 文字列データ型と文字データ型
  * 文字や、文字の集合（文字列）を入れる
  * Char, String …
<br><p></p>
* 論理データ型
  * 論理値（True / False -> 真か偽) を入れる・表す
  * Boolean …
<br><p></p>
* その他のデータ型
  * Variant, Currency, Array …
<br><p></p>

より多くの、Delphiのデータ型の一覧はDocwikiを参照してください：
http://docwiki.embarcadero.com/RADStudio/Berlin/ja/Delphi_のデータ型


###宣言について
**プログラム内で使う前に、変数（入れ物）として識別子を付けて使用する型を指定します。**

* 指定する場所は、プログラム内の var 宣言のブロック内に記述します。
* 定数はプログラム内のconst 宣言ブのロック内に記述します。

**宣言する場所で利用可能（参照可能）な範囲が異なります。**

* interface部内varブロック内で変数の宣言をした場合 
  * 外部ユニットからも参照可能なグローバル変数となる
* implementation 部直下のvarブロック内で変数の宣言をした場合 
  * ユニット内で使用可能なグローバル変数
* procedure / function内のvarブロック内で変数の宣言をした場合 
  * 手続き、関数内でのみ有効な変数

**宣言の例**
![image](https://qiita-image-store.s3.amazonaws.com/0/145847/9e38dce0-5426-4c8c-a8f8-7804c26b227f.png)

###代入について
**変数にデータを入れることを代入といいます**

*  `:=` （代入演算子）を使用して変数に代入します。
* `[代入される変数] := [代入したいデータ]`  の順序で書きます。 
* 変数の型に合うデータが代入可能です。

![image](https://qiita-image-store.s3.amazonaws.com/0/145847/ed4724b5-69d9-7c0e-c453-f1012a341d2a.png)

```delphi
myString := myInteger.ToString  {ヘルパーで整数を文字列変換して代入。これはOK。
ヘルパーは下記にて説明します。}
```

###ヘルパー
**変数を扱う上で便利な機能 （数値を文字列化する等）**
* Integer 型ヘルパー / 浮動小数点型ヘルパーなどがあります。

![image](https://qiita-image-store.s3.amazonaws.com/0/145847/4156ab06-22f0-a236-431c-8931fff65c2f.png)

参考DocWiki：
http://docwiki.embarcadero.com/Libraries/Berlin/ja/System.SysUtils.TIntegerHelper_Methods
http://docwiki.embarcadero.com/Libraries/Berlin/ja/System.SysUtils.TSingleHelper_Methods

###ルーチン
**ヘルパー以外にも変数を扱う上で便利な関数があります**

![image](https://qiita-image-store.s3.amazonaws.com/0/145847/4e9a33b3-94ed-5a15-3cf1-5c51cfa32bcd.png)

参考 docwiki その他の標準ルーチンについてはこちらをご参照ください：
https://goo.gl/PZRP5x


###ユーザー定義データ型
**自分好みのデータ型を作るには、`Type`ブロックの宣言後に定義します**

* ある連続した範囲を入れられるデータ型を作れる「部分範囲」
`TypeTOomoji = ‘A’ .. ‘Z’; 	 //大文字AからZだけを代入できる型を定義`
`TSuuji = 0..9;		//0から9だけを代入できる型を定義`
`THyakuketa = 100..999	//100から999までの三桁だけを代入できる型を定義`

* 特定の任意の値を保持するデータ型を作れる「列挙型」
`TColor = (Red, Yellow, Green, Cyan, Blue, Violet); 	//列挙している文字列（色）だけを保持できる型`
`TFontStyle = (fsBold, fsNarrow, fsItalic, fsUnderline);	//列挙しているフォントスタイルを保持できる型`

* さらに、データ型を複数同時に保持できるようになる「集合型」 “Set of”
`TFontStyleSuite = set of TFontStyle; 		//複数のフォントスタイル (太文字 ＋イタリック)を同時保持`

**ユーザーデータ型は`var` ブロックで識別子を付け型指定して使用します**

```delphi:
var 
  myColor : TColor;			//Typeブロックで定義したTColor の変数識別子を指定
  myFontstyles : TFontStyleSuite;	//集合型として定義したTFontStyleSuite を使用
```
**代入する際に、集合型 は複数のデータを保持可能で、集合演算子を使用して組み合わせ可能です**

```delphi
 MyFontStyles := [TFontStyle.fsBold];
 MyFontStyles := MyFontStyles + [TFontStyle.fsItalic, TFontStyle.fsUnderline] - [TFontStyle.fsBold];
```
* Include / Exclude で代入する方法もあります : `Include(MyfontStyles, TFontStyle.fsBold);`

![image](https://qiita-image-store.s3.amazonaws.com/0/145847/34eb74d2-7261-8450-11c3-8209ad0a96b3.png)

###式と演算子
**式とは値を返す構文のこと**

* 変数一つでも式 (変数の保持している値が返る）
* 関数も式 （関数の戻り値が返る）
* 算術式 10-5/2 も式 （計算の結果が返る）
* `A := X;  A := somefunction();  A := 10-5/2;   //式は値を戻すのでこんな感じで代入して使える`   
* `If A = X then~ :   //この A=X も式。比較演算を使ってBoolean 型の値を返すので if 条件式に使える`

**演算子は下記のような計算・演算、比較を行うための記号や記述のこと**

* +, -,  *, / …  などの計算を行うための算術演算子 
* if 文などの条件式を複合的につかうための not, and, or, xor などの論理演算子
* if 文なの条件比較に使われる =, <>, <=, >= などの関係演算子
* := も代入演算子

各演算子は優先度があります。詳しくはDocwiki参照  
参考 docwiki ：http://docwiki.embarcadero.com/RADStudio/Berlin/ja/式（Delphi）

**演算子の一例**

* 算術演算子
![image](https://qiita-image-store.s3.amazonaws.com/0/145847/ef8764d8-59df-3ed1-58fc-0c26e3546eab.png)

* 比較演算子
![image](https://qiita-image-store.s3.amazonaws.com/0/145847/6453cd4c-d11d-9d01-227c-aa0e12ed8862.png)

###日付 と 時刻 の型
**日付、時間を扱う便利な型があります**

* `TDateTime` 

**日付、時間操作に便利な関数*があります*
![image](https://qiita-image-store.s3.amazonaws.com/0/145847/04f85afd-bba9-828c-bd1b-cec4a711b24e.png)
![image](https://qiita-image-store.s3.amazonaws.com/0/145847/c097de55-f06f-ec64-5f77-150d9698e829.png)
参考Docwiki: http://docwiki.embarcadero.com/RADStudio/Berlin/ja/日付および時刻のサポート

![image](https://qiita-image-store.s3.amazonaws.com/0/145847/78de5c58-b11d-5ccc-f5d1-30d07bf4e69a.png)


###型のキャスト と 型変換
**異なる型には代入できないが、あえて代入する際に使う方法です**

* 数値型においてより大きな入れ物に入れる場合や、整数値を実数型（浮動小数点型）に入れる場合には、型キャストは必要なく安全に代入可能
  * Int64型 (整数) := Integer (整数);
  * Single型 (実数) := Integer (整数);

* 異なる型に物理的にデータをコピーする方法がキャスト
* 異なる型に関数やルーチンを使って戻される値を使うのが型変換

**キャスト** ：どの型に変化するか型名を書き、カッコでくくる
![image](https://qiita-image-store.s3.amazonaws.com/0/145847/d40a7e5c-8ac3-1750-6dde-933b69fc4956.png)
コンパイラによる型のエラーチェックが行われない弊害があり、エラー箇所の発見が行いにくくなります

**型変換** ： 関数、ルーチン、ヘルパーを使って変換
![image](https://qiita-image-store.s3.amazonaws.com/0/145847/4c1d84bc-7ac1-8eeb-a7df-c8665bf409fe.png)

参考Docwiki : 
http://docwiki.embarcadero.com/RADStudio/Berlin/ja/型変換ルーチン
http://docwiki.embarcadero.com/RADStudio/Berlin/ja/Delphi_組み込みルーチン


##おわりに
第2回、1月30日分の Delphiパート「![image](https://qiita-image-store.s3.amazonaws.com/0/145847/f8912bcd-c737-12fe-28a6-d9a752f2723d.png)」について以上です。

エンバカデロブログ：https://community.embarcadero.com/blogs/blog-menu?view=tags&layout=tag&id=1894


[＜＜シーズン2、第1回の記事はこちら](http://qiita.com/kazaiso/items/eafa3d7a0d7207232a76)
[シーズン2 第3回の記事はこちら＞＞](http://qiita.com/kazaiso/items/93be0a3a000fabbea368)