【delphi / c++builder starter チュートリアルシリーズ】 シーズン2 delphi の部...

19
© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. 第4第 ‟Function 第 Procedure ( 第第第第第第 第第第第 2 ププププププププププププププププププ DELPHI 第第

Upload: -

Post on 14-Feb-2017

58 views

Category:

Engineering


4 download

TRANSCRIPT

Page 1: 【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「条件とループ」Function と Procedure (関数と手続き)

© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential.

第 4回‟Function と Procedure ( 関数と手続き)„

シーズン 2 :プログラミング言語をやさしく覚えよう

DELPHI の部

Page 2: 【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「条件とループ」Function と Procedure (関数と手続き)

2© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

Delphi / C++Builder Starter チュートリアルシリーズ

シーズン 2 : 2017 年 1 月 23 日 ~ 3 月 27 日 全 9 回

時間 :毎週 月曜 17 時 00 分 ~17 時 50 分 Delphi 17 時 00 分 ~17 時 20 分 / C++Builder 17 時 30 分 ~17 時 50 分

ねらい :プログラミング言語をやさしく覚えようシーズン 2

第 1 回2017 年 1 月 23

日 シューティングゲームのプログラム第 2 回 1 月 30 日 変数と 型第 3 回 2 月 6 日 条件 とループ第 4 回 2 月 13 日 function と procedure ( 関数と手続き)第 5 回 2 月 20 日 配列 と レコード第 6 回 2 月 27 日 文字列 と オブジェクト第 7 回 3 月 6 日 オブジェクト指向第 8 回 3 月 13 日 作ってみよう(仮)第 9 回 3 月 27 日 コミュニティ と 勉強会

セミナー情報 : 下記の Web サイトhttp://forms.embarcadero.com/starter-tutorial-webinar

Page 3: 【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「条件とループ」Function と Procedure (関数と手続き)

3© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

第 4 回 「 function と procedure ( 関数と手続き)」

今日のねらい• 関数と手続きを知る• 関数と手続きの書き方

実施内容• function と procedure の違い• 宣言と実装• 使い方、関連するキーワード

Page 4: 【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「条件とループ」Function と Procedure (関数と手続き)

4© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

無料版 Delphi 10.1 Berlin Starter Edition 入手方法

• シリアルキーを知らせるメール内にも再ダウンロードリンク有• ダウンロード、インストール参考ブログ: https://goo.gl/CCBNdx

エンバWeb 製品 Delphi Starter

バナー 登録 Get

無料で使える開発環境をダウンロード

EDN* に登録済の方は EDN アカウントでダウンロード可

登録完了後、自動でインストーラーのダウンロード開始

インストール時にシリアルキーを入力

登録時のメールアドレスにシリアルキーが配信される

Page 5: 【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「条件とループ」Function と Procedure (関数と手続き)

5© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

function( 関数 ) と procedure( 手続き ) 名前(識別子)を付けて処理を実装しておき、その名前で呼び出せる

• function : 関数。戻り値がある

• procedure : 手続き。戻り値がない

• ルーチンという名称でひとくくりにすることもある

宣言の後には [ ; ] ( セミコロン ) 関数、手続きにデータを渡すには引数 として受け渡す

処理の実装部はルーチンの名称、パラメーター等の記述の後、

begin で始まり end で終わる

Page 6: 【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「条件とループ」Function と Procedure (関数と手続き)

6© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

implementation 部での実装方法 パラメーターがないときにパラメーターの記載のための ( ) は省略可

function の戻り値は Result に代入procedure ルーチン識別子 ( パラメーターの識別子 : パラメーターのデータ型 ); // [;] を忘れずにbegin ShowMessage(str); // 処理実装end;

procedure ルーチン識別子 ; // パラメーターがなければ ( かっこ ) 省略可begin // 処理実装end;

function ルーチン識別子 ( パラメーターの識別子 : パラメーターのデータ型 ): 戻り値のデータ型 ; begin// 戻り値がある function は Result に戻り値を代入 Result := 戻り値 // または関数名(ルーチン識別子)に戻り値を入れるend;

Page 7: 【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「条件とループ」Function と Procedure (関数と手続き)

7© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

function と Procedure の 実装コード例 コード例procedure myShowProcedure(str: String); // 渡された文字列を表示する Procedurebegin ShowMessage(str);end;

procedure Hello; // パラメータが必要なければ ( ) は省略可begin ShowMessage('Hello delphi world');end;

function myIncFunction(I: Integer): Integer; // 戻り値がある場合には functionbegin // パラメータ変数はは処理内で変数として使用可能 Result := I + 1; // 戻り値は Result に代入 // myIncFunction := I + 1; のように関数名に代入しても戻り値として返すend;

Page 8: 【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「条件とループ」Function と Procedure (関数と手続き)

8© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

ルーチンを呼出し順序を解決する「前方宣言」 先に記述されているルーチンから、より後ろに記載されているルーチンを呼び出せません

forward キーワードを付け、先に宣言しておき解決します

他ユニットから参照されて良い場合には Interface 部で宣言してもよい

procedure SayHi; forward; //forward で実際の処理を記載せずに先に宣言のみ

procedure SayHiHi;begin SayHi; //forward キーワードで宣言しているため呼び出し可能 SayHi;end;

procedure SayHi; //forward で実装を先送りにしてるルーチンの処理をここで記載begin ShowMessage(‘ はい’ );end;

Page 9: 【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「条件とループ」Function と Procedure (関数と手続き)

9© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

クラス内に宣言されているルーチン「メソッド」 ※ 「クラス」の詳しくはオブジェクト指向のセッションで説明

Type宣言で TForm1 にくっついているイベントハンドラもメソッドの一つ

procedure TForm1.Button1Click(Sender: TObject);begin //Tform 内の Onclick メソッド における処理実装を記述end;

type // ブロックのクラス内で先にルーチンの宣言を行っておくクラス名 = class( 継承クラス )procedure ルーチン識別子 ( パラメーター : パラメータのデータ型 ); // 定義内でメソッド宣言のみ// 省略end;

procedure クラス名 . ルーチン名 ( パラメーター : パラメータのデータ型 ); // メソッドの実装begin // 省略end;

Page 10: 【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「条件とループ」Function と Procedure (関数と手続き)

10© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

自らのルーチンを呼び出すことが可能

自らを呼び出すルーチン。「再起関数」と呼ばれる

ループの代わりに使用したり、フォルダ階層の読み取りなどに使用

function Ruijyou(Base, Exp: Integer): Integer; //Base の Exp 累乗を求める再起関数begin if Exp = 0 then Result := 1 // else Result := Base * Ruijyou(Base, Exp - 1); // 累乗数を減らして自らの関数を呼び出しend;

Ruijyou(3, 3): Integer; // 戻り値は 27

Page 11: 【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「条件とループ」Function と Procedure (関数と手続き)

11© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

ルーチンの処理をその場で終了しルーチンを出る「 Exit 」

ループ処理で必要な情報を見つけたときなどにその場でルーチンを終了できる

procedure なら Exit; で ルーチンを出る

function なら Exit( 戻り値 ); で戻り値を指定して出る

//String に ‘ A’ が含まれているかチェックする関数function CheckIncludeA(str: String): Boolean;var ch: Char;begin for ch in str do begin if ch = 'A' then Exit(True); //A を見つけたら戻り値 True で Exit end; Result := False;end;

Page 12: 【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「条件とループ」Function と Procedure (関数と手続き)

12© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

パラメータ と戻り値 ルーチンのパラメータと戻り値には定義されているデータ型と一致するデータを渡す

(変数における代入と同じ)

ルーチン使用時の引数(パラメータ)には式を使用可能

function DoubleValue(iNum: Integer): Integer;begin Result := iNum * 2;end;

procedure TForm1.Button1Click(Sender: TObject);vari : Integer;begin i := DoubleValue(8-1); //式の結果、整数値なのでこれは定義と合致 i := DoubleValue(10.2); // 小数点の実数は定義の整数型と異なるので、これはエラーend;

Page 13: 【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「条件とループ」Function と Procedure (関数と手続き)

13© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

パラメータのデータ・変数の受け渡しについて ルーチンでパラメータにデータを渡す方法は「値渡し」と「参照渡し」がある

デフォルトでは値渡し• ルーチンの引数として呼び出し元でセットした変数は、呼び出し先のルーチン処理によって変更され

ない

• 呼び出し先のルーチンでは引数は新たにコピーしてから使用される

var キーワードを使用することによって参照渡しができる• ルーチンの引数として呼び出しもとでセットした変数を、呼び出し先のルーチン内の処理によって変

更できる

パラメータの値渡しは、変数内の値だけを渡して、別途利用されるイメージ。参照渡しは、

変数の入れ物ごと渡して変数に対して処理できるイメージ

(例外)参照型と呼ばれる classなどのオブジェクトは値渡しではない

Page 14: 【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「条件とループ」Function と Procedure (関数と手続き)

14© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

パラメータのデータ・変数の受け渡しについて(2)

procedure MyNameInput(var str: String); // 参照渡しの var キーワード begin str := ‘Kaz Aiso’; // 参照渡しなので、呼び出し元の変数に値を代入するのと同じ end;

procedure TForm1.Button1Click(Sender: TObject); var myStr: string; begin MyNameInput(myStr); // 呼び出しルーチンに値を代入してもらう ShowMessage(myStr); // 参照渡しなので、変数に呼び出しルーチン先で文字列が入れられている end;

参照渡しのコード例

Page 15: 【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「条件とループ」Function と Procedure (関数と手続き)

15© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

関数のオーバーロード 同じルーチン識別子でパラメータ(と戻り値)の異なるルーチンを複数宣言・実装できる

ルーチン宣言の後にoverload;キーワードを記述

パラメータに設定されたデータ型と、呼び出しの際の引数の型で判断して実行される

例 AddFunc(10.1, 1.1); //浮動小数点の引数で下記関数を呼ぶと、2つ目の関数が実行される

function AddFunc(A, B: Integer): Integer; overload; //整数値と整数値のパラメータbegin Result := A + B;end;

function AddFunc(A, B: Single): Single; overload; //浮動小数点と浮動小数点のパラメータbegin Result := A + B;end;

function AddFunc(A, B: Char): String; overload; // 文字型と文字型のパラメータbegin Result := A + B;end;

Page 16: 【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「条件とループ」Function と Procedure (関数と手続き)

16© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

デフォルトパラメータ ルーチンのパラメーターにデフォルト値をあらかじめ設定可能

ルーチン呼び出し時に、デフォルト値をもつパラメータは省略可能

デフォルト値は const か値渡し。かつパラメーターリストの後ろにまとめるprocedure MyLogShow(str: string; dt: TDateTime = 0); {TDateTime で宣言されている第2パラメータにデフォルト値 }var dtTemp: TDateTime;begin if dt = 0 then dtTemp := Now // 第2パラメータが省略されていたら、現在時刻を代入 else dtTemp := dt; // 第 2 パラメータの指定があれば、指定された日時の値を代入 ShowMessage(DateTimeToStr(dtTemp) + ': ' + str);end;

procedure TForm1.Button1Click(Sender: TObject);begin MyLogShow(‘ ログ’ ); // 第 2 パラメータはデフォルト値が設定されているので省略可能 MyLogShow(‘ ログ’ , now);end;

Page 17: 【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「条件とループ」Function と Procedure (関数と手続き)

17© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

他、関連する機能など

インライン化 (inline  指令 )• コンパイル時に関数を、当該呼び出し箇所にインライン化

• http://docwiki.embarcadero.com/RADStudio/Berlin/ja/手続きと関数の呼び出し(Delphi)

手続き型• ルーチンを型として使用する

• http://docwiki.embarcadero.com/RADStudio/Berlin/ja/手続き型

外部宣言と DLL 読み込み• http://docwiki.embarcadero.com/RADStudio/Berlin/ja/手続きと関数(Delphi)• http://docwiki.embarcadero.com/RADStudio/Berlin/ja/ライブラリとパッケージ

Page 18: 【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「条件とループ」Function と Procedure (関数と手続き)

18© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

本日のセミナー内容は弊社ブログに掲載予定

[ コミュニティ ] ↓

[ 日本人ブログ ]

実施内容の再視聴 皆さんが見ているWebページの下に、順次アップロード

エンバカデロWebサイト : http://forms.embarcadero.com/starter-tutorial-webinar [リソース ] – [イベント ]の「Delphi / C++Builder Starter チュートリアルシリーズ」ページ

実施内容サマリー

• Community embarcadero ( コミュニティ エンバカデロ )に Webリンク、サンプルコード情報等

http://community.embarcadero.com/

「エンバカデロ」で検索

Page 19: 【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「条件とループ」Function と Procedure (関数と手続き)

19© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp

次回の Delphi パートは2 月 20 日(月) 17:00 よ

“配列とレコード„ このあと

• リアルタイム放送限定 特別コンテンツ

• C++ パート