SlideShare une entreprise Scribd logo
1  sur  19
© 2016 Embarcadero Technologies, Inc.
All rights reserved. Proprietary and confidential.
第4回
‟Function と Procedure (関数と手続き)„
シーズン2:プログラミング言語をやさしく覚えよう
DELPHIの部
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
3© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
第4回 「function と procedure (関数と手続き)」
 今日のねらい
• 関数と手続きを知る
• 関数と手続きの書き方
 実施内容
• 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アカウントでダウンロード可
登録完了後、自動でインストーラーのダウンロード開始
インストール時にシリアルキーを入力
登録時のメールアドレスにシリアルキーが配信される
5© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
function(関数)と procedure(手続き)
 名前(識別子)を付けて処理を実装しておき、その名前で呼び出せる
• function : 関数。戻り値がある
• procedure : 手続き。戻り値がない
• ルーチンという名称でひとくくりにすることもある
 宣言の後には [ ; ] (セミコロン)
 関数、手続きにデータを渡すには引数 として受け渡す
 処理の実装部はルーチンの名称、パラメーター等の記述の後、
begin で始まり end で終わる
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;
7© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
functionと Procedure の 実装コード例
 コード例
procedure myShowProcedure(str: String); //渡された文字列を表示するProcedure
begin
ShowMessage(str);
end;
procedure Hello; //パラメータが必要なければ ( )は省略可
begin
ShowMessage('Hello delphi world');
end;
function myIncFunction(I: Integer): Integer; //戻り値がある場合にはfunction
begin
//パラメータ変数はは処理内で変数として使用可能
Result := I + 1; //戻り値は Resultに代入
// myIncFunction := I + 1; のように関数名に代入しても戻り値として返す
end;
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;
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;
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
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;
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);
var
i : Integer;
begin
i := DoubleValue(8-1); //式の結果、整数値なのでこれは定義と合致
i := DoubleValue(10.2); // 小数点の実数は定義の整数型と異なるので、これはエラー
end;
13© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
パラメータのデータ・変数の受け渡しについて
 ルーチンでパラメータにデータを渡す方法は「値渡し」と「参照渡し」がある
 デフォルトでは値渡し
• ルーチンの引数として呼び出し元でセットした変数は、呼び出し先のルーチン処理によって変
更されない
• 呼び出し先のルーチンでは引数は新たにコピーしてから使用される
 var キーワードを使用することによって参照渡しができる
• ルーチンの引数として呼び出しもとでセットした変数を、呼び出し先のルーチン内の処理に
よって変更できる
 パラメータの値渡しは、変数内の値だけを渡して、別途利用されるイメージ。参
照渡しは、変数の入れ物ごと渡して変数に対して処理できるイメージ
 (例外)参照型と呼ばれるclassなどのオブジェクトは値渡しではない
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;
 参照渡しのコード例
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;
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;
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/ライブラリとパッケージ
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/
「エンバカデロ」で検索
19© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp
 次回のDelphiパートは
2月20日(月)17:00より
“配列とレコード„
 このあと
• リアルタイム放送限定 特別コンテンツ
• C++ パート

Contenu connexe

Tendances

yieldとreturnの話
yieldとreturnの話yieldとreturnの話
yieldとreturnの話bleis tift
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„和弘 井之上
 
リテラルと型の話 #__swift__
リテラルと型の話 #__swift__リテラルと型の話 #__swift__
リテラルと型の話 #__swift__Tomohiro Kumagai
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門natrium11321
 
Swift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhiosSwift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhiosTomohiro Kumagai
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会Akihiko Matuura
 
Better C#の脱却を目指して
Better C#の脱却を目指してBetter C#の脱却を目指して
Better C#の脱却を目指してbleis tift
 
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラーNode.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラーmganeko
 
最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)Akihiko Matuura
 
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプC++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプKohsuke Yuasa
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードShigenori Sagawa
 
そしてjsの基礎へ戻る#4
そしてjsの基礎へ戻る#4そしてjsの基礎へ戻る#4
そしてjsの基礎へ戻る#4Shingo Inoue
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性Hibiki Yamashiro
 
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用までTemplate Meta Programming入門から応用まで
Template Meta Programming入門から応用までyoshihikoozaki5
 
F#によるFunctional Programming入門
F#によるFunctional Programming入門F#によるFunctional Programming入門
F#によるFunctional Programming入門bleis tift
 
C++ Template Metaprogramming
C++ Template MetaprogrammingC++ Template Metaprogramming
C++ Template MetaprogrammingAkira Takahashi
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第3回 ‟条件とループ„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第3回 ‟条件とループ„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第3回 ‟条件とループ„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第3回 ‟条件とループ„和弘 井之上
 
現実(えくせる)と戦う話
現実(えくせる)と戦う話現実(えくせる)と戦う話
現実(えくせる)と戦う話bleis tift
 

Tendances (20)

yieldとreturnの話
yieldとreturnの話yieldとreturnの話
yieldとreturnの話
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
 
リテラルと型の話 #__swift__
リテラルと型の話 #__swift__リテラルと型の話 #__swift__
リテラルと型の話 #__swift__
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
 
Swift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhiosSwift 2.0 の Error Handling #yhios
Swift 2.0 の Error Handling #yhios
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
 
Better C#の脱却を目指して
Better C#の脱却を目指してBetter C#の脱却を目指して
Better C#の脱却を目指して
 
ちょっと詳しくJavaScript 第3回【prototype】
ちょっと詳しくJavaScript 第3回【prototype】ちょっと詳しくJavaScript 第3回【prototype】
ちょっと詳しくJavaScript 第3回【prototype】
 
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラーNode.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
 
最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)
 
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプC++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
 
そしてjsの基礎へ戻る#4
そしてjsの基礎へ戻る#4そしてjsの基礎へ戻る#4
そしてjsの基礎へ戻る#4
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用までTemplate Meta Programming入門から応用まで
Template Meta Programming入門から応用まで
 
F#によるFunctional Programming入門
F#によるFunctional Programming入門F#によるFunctional Programming入門
F#によるFunctional Programming入門
 
C++ Template Metaprogramming
C++ Template MetaprogrammingC++ Template Metaprogramming
C++ Template Metaprogramming
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第3回 ‟条件とループ„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第3回 ‟条件とループ„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第3回 ‟条件とループ„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第3回 ‟条件とループ„
 
C++ tips1 #include編
C++ tips1 #include編C++ tips1 #include編
C++ tips1 #include編
 
現実(えくせる)と戦う話
現実(えくせる)と戦う話現実(えくせる)と戦う話
現実(えくせる)と戦う話
 

En vedette

DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼうDELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼうKaz Aiso
 
BDEを使った業務アプリを移行ツールで最新化(2017年4月14日開催)
BDEを使った業務アプリを移行ツールで最新化(2017年4月14日開催)BDEを使った業務アプリを移行ツールで最新化(2017年4月14日開催)
BDEを使った業務アプリを移行ツールで最新化(2017年4月14日開催)Kaz Aiso
 
Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」
Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」
Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」Kaz Aiso
 
【U-22】Delphi / C++Builder / RAD Studio 概要
【U-22】Delphi / C++Builder / RAD Studio 概要【U-22】Delphi / C++Builder / RAD Studio 概要
【U-22】Delphi / C++Builder / RAD Studio 概要Kaz Aiso
 
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY1: Delphiで作るはじめてのアプリケーション
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY1: Delphiで作るはじめてのアプリケーションDELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY1: Delphiで作るはじめてのアプリケーション
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY1: Delphiで作るはじめてのアプリケーションKaz Aiso
 
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係Kaz Aiso
 
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第7回 「オブジェクト指向 」
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第7回 「オブジェクト指向 」【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第7回 「オブジェクト指向 」
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第7回 「オブジェクト指向 」Kaz Aiso
 
移行セミナー BDE to FireDAC 20161018
移行セミナー BDE to  FireDAC 20161018移行セミナー BDE to  FireDAC 20161018
移行セミナー BDE to FireDAC 20161018Kaz Aiso
 

En vedette (8)

DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼうDELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY2: DELPHIでUI設計のポイントを学ぼう
 
BDEを使った業務アプリを移行ツールで最新化(2017年4月14日開催)
BDEを使った業務アプリを移行ツールで最新化(2017年4月14日開催)BDEを使った業務アプリを移行ツールで最新化(2017年4月14日開催)
BDEを使った業務アプリを移行ツールで最新化(2017年4月14日開催)
 
Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」
Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」
Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」
 
【U-22】Delphi / C++Builder / RAD Studio 概要
【U-22】Delphi / C++Builder / RAD Studio 概要【U-22】Delphi / C++Builder / RAD Studio 概要
【U-22】Delphi / C++Builder / RAD Studio 概要
 
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY1: Delphiで作るはじめてのアプリケーション
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY1: Delphiで作るはじめてのアプリケーションDELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY1: Delphiで作るはじめてのアプリケーション
DELPHI BOOT CAMP / DELPHIでビジュアル開発に挑戦しよう ◆ DAY1: Delphiで作るはじめてのアプリケーション
 
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係
 
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第7回 「オブジェクト指向 」
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第7回 「オブジェクト指向 」【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第7回 「オブジェクト指向 」
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第7回 「オブジェクト指向 」
 
移行セミナー BDE to FireDAC 20161018
移行セミナー BDE to  FireDAC 20161018移行セミナー BDE to  FireDAC 20161018
移行セミナー BDE to FireDAC 20161018
 

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

【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第1回 ‟シューティングゲームのプロ...
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】  シーズン2 Delphi の部 第1回 ‟シューティングゲームのプロ...【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】  シーズン2 Delphi の部 第1回 ‟シューティングゲームのプロ...
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第1回 ‟シューティングゲームのプロ...Kaz Aiso
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„和弘 井之上
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!Shohei Okada
 
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7Tetsuya Morimoto
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2Tomohiro Namba
 
2018年度 若手技術者向け講座 リファクタリング
2018年度 若手技術者向け講座 リファクタリング2018年度 若手技術者向け講座 リファクタリング
2018年度 若手技術者向け講座 リファクタリングkeki3
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんかcch-robo
 
C#coding guideline その2_20130325
C#coding guideline その2_20130325C#coding guideline その2_20130325
C#coding guideline その2_20130325Yoshihisa Ozaki
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 
魂のコーディング
魂のコーディング魂のコーディング
魂のコーディングDaisuke Tasaki
 
怠惰なRubyistへの道 fukuoka rubykaigi01
怠惰なRubyistへの道 fukuoka rubykaigi01怠惰なRubyistへの道 fukuoka rubykaigi01
怠惰なRubyistへの道 fukuoka rubykaigi01nagachika t
 
flow による型のある世界入門
flow による型のある世界入門flow による型のある世界入門
flow による型のある世界入門sairoutine
 
Hack/HHVM 入門
Hack/HHVM 入門Hack/HHVM 入門
Hack/HHVM 入門y-uti
 
PHP初心者セッション2023 〜ChatGPT時代の簡単な始め方〜
PHP初心者セッション2023 〜ChatGPT時代の簡単な始め方〜PHP初心者セッション2023 〜ChatGPT時代の簡単な始め方〜
PHP初心者セッション2023 〜ChatGPT時代の簡単な始め方〜Hideo Kashioka
 

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

【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第1回 ‟シューティングゲームのプロ...
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】  シーズン2 Delphi の部 第1回 ‟シューティングゲームのプロ...【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】  シーズン2 Delphi の部 第1回 ‟シューティングゲームのプロ...
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第1回 ‟シューティングゲームのプロ...
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!
 
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
 
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2
 
2018年度 若手技術者向け講座 リファクタリング
2018年度 若手技術者向け講座 リファクタリング2018年度 若手技術者向け講座 リファクタリング
2018年度 若手技術者向け講座 リファクタリング
 
WCO2012「PHP教室」
WCO2012「PHP教室」WCO2012「PHP教室」
WCO2012「PHP教室」
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんか
 
C#coding guideline その2_20130325
C#coding guideline その2_20130325C#coding guideline その2_20130325
C#coding guideline その2_20130325
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
魂のコーディング
魂のコーディング魂のコーディング
魂のコーディング
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
PHP 入門
PHP 入門PHP 入門
PHP 入門
 
怠惰なRubyistへの道 fukuoka rubykaigi01
怠惰なRubyistへの道 fukuoka rubykaigi01怠惰なRubyistへの道 fukuoka rubykaigi01
怠惰なRubyistへの道 fukuoka rubykaigi01
 
flow による型のある世界入門
flow による型のある世界入門flow による型のある世界入門
flow による型のある世界入門
 
PHPコアから読み解くPHP5.5
PHPコアから読み解くPHP5.5PHPコアから読み解くPHP5.5
PHPコアから読み解くPHP5.5
 
Hack/HHVM 入門
Hack/HHVM 入門Hack/HHVM 入門
Hack/HHVM 入門
 
Ruby4章
Ruby4章Ruby4章
Ruby4章
 
PHP初心者セッション2023 〜ChatGPT時代の簡単な始め方〜
PHP初心者セッション2023 〜ChatGPT時代の簡単な始め方〜PHP初心者セッション2023 〜ChatGPT時代の簡単な始め方〜
PHP初心者セッション2023 〜ChatGPT時代の簡単な始め方〜
 

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

  • 1. © 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. 第4回 ‟Function と Procedure (関数と手続き)„ シーズン2:プログラミング言語をやさしく覚えよう DELPHIの部
  • 2. 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
  • 3. 3© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp 第4回 「function と procedure (関数と手続き)」  今日のねらい • 関数と手続きを知る • 関数と手続きの書き方  実施内容 • functionとprocedure の違い • 宣言と実装 • 使い方、関連するキーワード
  • 4. 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アカウントでダウンロード可 登録完了後、自動でインストーラーのダウンロード開始 インストール時にシリアルキーを入力 登録時のメールアドレスにシリアルキーが配信される
  • 5. 5© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp function(関数)と procedure(手続き)  名前(識別子)を付けて処理を実装しておき、その名前で呼び出せる • function : 関数。戻り値がある • procedure : 手続き。戻り値がない • ルーチンという名称でひとくくりにすることもある  宣言の後には [ ; ] (セミコロン)  関数、手続きにデータを渡すには引数 として受け渡す  処理の実装部はルーチンの名称、パラメーター等の記述の後、 begin で始まり end で終わる
  • 6. 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;
  • 7. 7© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp functionと Procedure の 実装コード例  コード例 procedure myShowProcedure(str: String); //渡された文字列を表示するProcedure begin ShowMessage(str); end; procedure Hello; //パラメータが必要なければ ( )は省略可 begin ShowMessage('Hello delphi world'); end; function myIncFunction(I: Integer): Integer; //戻り値がある場合にはfunction begin //パラメータ変数はは処理内で変数として使用可能 Result := I + 1; //戻り値は Resultに代入 // myIncFunction := I + 1; のように関数名に代入しても戻り値として返す end;
  • 8. 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;
  • 9. 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;
  • 10. 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
  • 11. 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;
  • 12. 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); var i : Integer; begin i := DoubleValue(8-1); //式の結果、整数値なのでこれは定義と合致 i := DoubleValue(10.2); // 小数点の実数は定義の整数型と異なるので、これはエラー end;
  • 13. 13© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp パラメータのデータ・変数の受け渡しについて  ルーチンでパラメータにデータを渡す方法は「値渡し」と「参照渡し」がある  デフォルトでは値渡し • ルーチンの引数として呼び出し元でセットした変数は、呼び出し先のルーチン処理によって変 更されない • 呼び出し先のルーチンでは引数は新たにコピーしてから使用される  var キーワードを使用することによって参照渡しができる • ルーチンの引数として呼び出しもとでセットした変数を、呼び出し先のルーチン内の処理に よって変更できる  パラメータの値渡しは、変数内の値だけを渡して、別途利用されるイメージ。参 照渡しは、変数の入れ物ごと渡して変数に対して処理できるイメージ  (例外)参照型と呼ばれるclassなどのオブジェクトは値渡しではない
  • 14. 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;  参照渡しのコード例
  • 15. 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;
  • 16. 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;
  • 17. 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/ライブラリとパッケージ
  • 18. 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/ 「エンバカデロ」で検索
  • 19. 19© 2016 Embarcadero Technologies, Inc. All rights reserved. Proprietary and confidential. #embtwebi_jp  次回のDelphiパートは 2月20日(月)17:00より “配列とレコード„  このあと • リアルタイム放送限定 特別コンテンツ • C++ パート