プロデルで始める日本語プログラミング言語入門(#6) 「手順を使おう」


日本語プログラミング言語入門の第6話です。今回は「手順」という言葉について紹介します。「手順」はプロデルで一番特徴的で重要な機能です。

手順は、プログラミングの世界で一般に「関数」や「メソッド」「手続き」などと呼ばれています。「関数」という言葉は数学でも習いますがそれとは違って、プログラミングの世界ではいくつかの動作を一つにまとめたもの、と考えるとよいかと思います。

手順を使おう

プロデルにはあらかじめ、たくさんの手順が定義(用意)されています。実はこの連載で説明した「表示する」「報告する」「並び替える」と言った動詞は、手順の名前です。

「こんにちは」を表示する

第1話で紹介したこの文にある「表示する」という手順は、画面に文字列を表示する機能を持つプロデルに用意された手順です。

またこの文は、手順を呼び出すことから「手順呼び出し文」といいます。「表示する」手順では「を」という助詞を使います。

手順呼び出し文で使える助詞には「を」以外にも沢山あります。使える助詞は手順によって変わります。「表示する」手順で指定できる助詞は、プロデルの説明書であるプロデルリファレンスに書かれています。リファレンスを探せばプロデルで使える手順について詳しい情報が見つかります。

検索ページからキーワード検索することもできます。

「表示する」手順には、「~を」以外にも「~として」助詞や「~で」助詞を指定できます。

「ご挨拶」として「こんにちは」を情報アイコンで表示する

実行すると、メッセージボックスに指定したアイコンやタイトルが表示されます。

手順呼び出し文は、次の図のように、式と助詞を書く部分と、動詞の部分とに分かれています。後ほど詳しく説明します。

助詞の順番は変えてもOK

手順呼び出し文では、書く助詞の順番に決まりはありません。先ほどの例では、~として,~を,~で の順で3つの助詞を使いましたが、順番を変えて例えば次のように書くこともでき、実行される結果も同じです。

情報アイコンで「こんにちは」を「ご挨拶」として表示する

助詞は手順で定義された(リファレンスに書かれた)助詞以外の助詞を使うことは、できません。式の順番が同じでも別の助詞を書いてしまうと、構文エラーとなったり誤った動作になってしまいます。

「へ」助詞と「に」助詞に限り、同じ助詞と見なす仕様となっています。

プロデルでググる

プロデルには、検索する手順があります。Google, Bing, Yahoo!Japanとキーワード検索できます。

「プロデル」をググる
「プロデル」をBingする
「プロデル」をヤフーする

キーワードの文字列を変えて検索してみましょう。

お気に入りのサイトを開く

いつも見ているサイトを表示するには、「開く」手順を使います。開くでは「を」助詞にインターネットアドレス(URL)を指定します。URLは、Webブラウザの上部に表示されています。

「https://www.youtube.com/」を開く

アプリを起動する

「起動する」手順では、他のアプリを起動させることができます。

「notepad.exe」を起動する

実行ファイル名には、次のような名前が指定できます。実行ファイル名を変えて、他のアプリを起動してみましょう。

アプリ名 実行ファイル名
メモ帳notepad.exe
エクスプローラexplorer.exe
ペイントmspaint.exe
電卓calc.exe
ワードパッドwrite.exe
コマンドプロンプトcmd.exe

パラメータを指定する

起動するときにパラメータを指定するには、「~として」助詞を指定します。エクスプローラでは、パラメータにパスを指定することで指定したフォルダを開くこともできます。

「explorer.exe」を「"[マイピクチャー]"」として起動する

[マイピクチャー]の他にも次のようなフォルダ名が指定できます。

  • [マイドキュメント]
  • [デスクトップ]
  • [マイミュージック]
  • [マイビデオ]

また「”[マイピクチャー]Camera Roll\”」などと書くと、その中のフォルダも指定できます。

答えを返す手順

手順の中には、手順で処理された結果を答えとして返す手順があります。戻り値がある手順は、手順呼び出し式として計算式や変数と同じように指定できます。

例えば「質問する」手順を呼び出すと、質問メッセージを表示されクリックした選択肢を返してくれます。

結果は、「よろしいですか?」をはいといいえで質問アイコンにして質問したもの
結果を表示する

手順に戻り値があるかどうかは、リファレンスの手順の表に書かれています。リファレンスの「質問する」手順の項目を見ると、列挙値(はい,いいえなど)を返すことが書かれています。

動詞手順と名詞手順

手順には、名前の品詞によって動詞手順と名詞手順の2つがあります。

動詞手順は、「表示する」「進む」など動詞で名付けられた手順です。

名詞手順は、「サイン」,「コサイン」,「絶対値」,「十進数」など手順の名前が名詞となっている手順です。「の」助詞が使われる『○○の□□』の形式で書く戻り値がある手順が、名詞手順です。

//名詞手順
「FF00EF」の十進数を表示する
-3.14の絶対値を表示する

サンプル: バイオリズムを求める

さて、リファレンスにある手順を使ってバイオリズムを求めるサンプルプログラムを作ってみます。

バイオリズムとは、誕生日からの日数で、心身を表す3つの周期(身体P,感情S,知性I)を計算するものです。占いのプログラムでは、昔流行ってよく使われていた計算式です。

このプログラムでは周期の計算にsin関数を使います。プロデルにはsin計算するための「サイン」名詞手順があるのでこれを使います。

tは、(「1999/1/15」を日時形式化したもの)と今日の日付差の日数
P=(2×π×t/23)のサイン
S=(2×π×t/28)のサイン
I=(2×π×t/33)のサイン
「身体:[P]
感情:[S]
知性:[I]」を表示する

実行すると、実行した日の3つ数値が表示されます。3つの周期それぞれで、正の数だと良好、負の数だと不調ということを表すそうです。

プロデルでは、名詞手順に限って『《式》のサイン』と書く代わりに、数学のように『sin(《式》)』と書くこともできます。また「π」は、「円周率」と書いても同じ意味です。

//数式のような書く場合と、日本語表記で書く場合
P=sin(2×π×t/23)
知性は、(2×円周率×日数t/33)のサイン

作るプログラムによって、日本語で書く方が分かりやすい時と、数式のように書いた方が読みやすい時とがあります。場合によって自分が読みやすい,分かりやすいと思った書き方を選ぶことをおすすめします。

四捨五入する

計算した結果が小数以下が数桁になり読みづらいことがあります。そのような場合は「四捨五入する」手順を使います。この手順では四捨五入する桁数を桁番号で指定できます。桁番号がマイナスの場合は小数位が四捨五入されます。

tは、(「1999/1/15」を日時形式化したもの)と今日の日付差の日数
P=sin(2×π×t/23)
S=sin(2×π×t/28)
I=sin(2×π×t/33)
「身体:[Pを-4で四捨五入したもの]
感情:[Sを-4で四捨五入したもの]
知性:[Iを-4で四捨五入したもの]」を表示する

もし文を使って、計算した今日のバイオリズムから「最高」「良い」「普通」「悪い」「最低」で教えてくれるプログラムを作ってみましょう。

実補語と形式補語

ところで、手順呼び出し文の「~を」や「~に」の部分を「補語」と言います。補語には、実補語と形式補語とがあります。

実補語とは

実補語は、これまで紹介したような、『式 助詞』 の形式で書く補語です。実補語は、一般的なプログラミング言語で「引数(ひきすう)」にあたるものです。

プロデルでは、手順の引数を、式と助詞を組み合わせた実補語として表現することで、プログラミング言語として曖昧ではない文法を定めつつ、自然な日本語として読める表記となるように言語仕様を定めています。

形式補語とは

一方、形式補語は、手順の名前の一部を構成する補語のことです。リファレンスを読むと、手順によっては形式補語と動詞とがセットになって名前として定義されている手順が見つかります。

例えば、次のプログラムでは、「スペースを消す」という名前の手順を使っています。この手順は、動詞(消す)と補語(スペースを)とを合わせて名前になっています。

内容は、「     こんにちは    」
内容からスペースを消したものを報告する

このうちの補語の部分を「形式補語」と呼びます。

形式補語は、引数ではないので変数や式を使うことはできません。プロデルデザイナ上では、実補語が式(変数)と助詞が別々に色分けされているのに対して、形式補語は動詞と同じ色が付けられます。

自分の手順を定義しよう

ここまでは、プロデルに予め用意されている手順を使ってきましたが、自分で手順を定義することもできます。自分が作るプログラムでよく使う部分を手順としてまとめることができます。

自分の手順を作るには、次のような手順定義を書きます。

《動詞》手順
  《プログラム文》
終わり

《動詞》は、「処理する」「探す」と言った動詞です。動詞は自由に決めることができます。《プログラム文》には、その手順が呼び出された時に実行するプログラムを書きます。

処理する手順

終わり

探す手順

終わり

例えば、次のプログラムでは、メッセージを2つ表示するプログラムを「処理する」という手順として定義して、その手順を呼び出します。

処理する

処理する手順
	「あれこれする」と表示する
	「処理しました」と表示する
終わり

手順定義は、書いて良い場所が決まっています。必ず最初に実行されるプログラム(メインプログラム)が終わった後、つまりプログラムの最後に書きます。

引数を持つ手順

引数(実補語)がある手順を定義するには、手順定義冒頭の動詞の前に『【《仮引数》】《助詞》』の形式で実補語を指定します。仮引数は【 】もしくは[ ]で必ず囲んでください。

手順定義で複数の補語を指定する時は、補語と補語の間を読点「、」で区切ってください。なお「にをは」などよく使われる助詞では「、」を省略することもできます。

【仕事】を、【時間】で、処理する手順

終わり

【場所】から【捜し物】を探す手順

終わり

《仮引数》には、その手順の中でのみ利用できる変数の名前を定義します。手順が呼び出されると仮引数には、手順呼び出し文で指定した式の値が入っています。仮引数は、《助詞》によって対応付けられています。

例えば次のプログラムでは、1行目の手順呼び出し文に書いた『「洗濯」を』が、同じ助詞(~を)である3行目の『【仕事】を』に対応します。つまり「処理する」手順が実行される時に、「仕事」変数には「洗濯」という値が入っています。

同じように「~で」に対応する「時間」変数には60という値が入っています。

「洗濯」を60で処理する

【仕事】を【時間】で、処理する手順
  「[仕事]を[時間]分、頑張りました。」と表示する
終わり

手順を使うとプログラムが整理され、後から読み直したときにも分かりやすくなります。同じプログラムを使うときは、コピー&ペーストせずに積極的に手順を定義しましょう。

形式補語

形式補語も実補語と同じように、手順定義冒頭の動詞の前に指定します。形式補語の場合は【 】で囲む必要はありません。

買い物へ出かける
クリーニングへ出かける

買い物へ、出かける手順
	「スーパーでお買い物します。」と報告する
終わり

クリーニングへ、出かける手順
	「スーツを受け取ります。」と報告する
終わり

値を返す

手順を実行した結果を値として返すには、「返す」文を使います。「返す」文を使うと、計算結果や処理に成功したかどうかなどを、手順を呼び出した側のプログラム文に教えることができます。

「リビング」で見つけたものを表示する

【場所】で、見つける手順
	「[場所]を探検する」と報告する
	「クマのぬいぐるみ」を返す
終わり

名詞手順を定義する

「名詞手順」の場合は、『《名前》を求める手順』 という形式で手順定義を書きます。

100から999までのラッキーナンバーを表示する

【開始値】から【終了値】までのラッキーナンバーを求める手順
	開始値から終了値までの乱数を返す
終わり

練習問題!

最後に練習問題です!sin関数やcos関数を使うことで2つの緯度・経度からその点を結ぶ最短距離を計算できます。今回は、全国の名所の距離を計算するプログラムを作ってみてください。

次のプログラムは、距離を計算するプログラムの一部です。次のような手順呼び出し文で2つの場所の緯度と経度を指定すると、距離を返す名詞手順を定義してプログラムを完成させてください。

//練習問題のプログラムの一部

//東京スカイツリーから東京タワーまでの距離
{35.710063, 139.8107}から{35.658581, 139.745433}までの距離を報告する

//大阪ドームから福岡ドームまでの距離
{34.669528, 135.476003}から{33.595360, 130.362195}までの距離を報告する

//名古屋テレビ塔からさっぽろテレビ塔までの距離
{35.172349, 136.908333}から{43.061064, 141.356320}までの距離を報告する

2つの場所(緯度,経度)から距離を求める計算式は、次の通りです。

この計算式をプロデルで書くと次の通りになります。

距離=6378.137*acos((始点(1)度のサイン)*(終点(1)度のサイン)+(始点(1)度のコサイン)*(終点(1)度のコサイン)*((終点(2)-始点(2))度のコサイン))

※始点は、{緯度1,経度1}。終点は、{緯度2,経度2}。で指定することにします。

緯度経度は、geocodingなどの地図サイトで調べられます。自分の知っている場所や名所の緯度経度を調べて、距離を計算してみましょう。

まとめ

今回は、プロデルで一番大切な「手順」について一通り紹介しました。「手順」は、日本語プログラミング言語である「プロデル」らしい特徴や魅力がたくさん詰まった機能です。

新しい用語で満載でしたが、難しいと思った時は、一度にすべて理解しようとせず、とりあえず例文を実行したり練習問題にトライしたりしてみてください。次話を読んだ後で、手順で分からなかった所を読み返して、少しずつ理解して覚えて貰えたら嬉しいです。

次回もお楽しみに!

※当ブログの記事の著作権はゆうとにあります。プロデルに関係が無い目的で、文章や図表,プログラムを複製したり改変して掲載することを堅く禁止します

  • 続きを読みたい (1)
  • いいね (2)

コメントを残す