プロデル 文法編

日本語プログラミング言語「プロデル」ワンページ マニュアル

はじめに

このワンページマニュアルでは、日本語プログラミング言語「プロデル」の文法および言語仕様を説明します。

このマニュアルでは、読みやすくするために、次のような表記で書かれています。

構文・書式の表記

プログラムの構文・書式は、次のような黄色い四角で表します。

《○○》の部分には、文字や数値、変数(識別子)を入力します。
※《 》という記号は説明上で区別するものですので、プログラムには入力しないでください

 

例文プログラムの表記

プロデルで実行することができる例は、次のような水色の四角で表します。

※「’○○」または「ーー○○」の部分は説明文を表し、この部分に書いたことは動作に影響しません

 

 


説明文

説明文(コメント)は、次のいくつかの書き方で指定できます。
記号は、全角、半角どちらでも指定できます。

行末まで有効

’説明文

//説明文

ーー説明文

※「ーー」は、ハイフン(--)ではありません。全角のみ有効です

複数行有効

/*
 説明文(複数行)
*/


プロデルの式は、次のように分類できます。


定数

定数は、次の通りです。

プロデルでは、以下のマニュアル中で《 》に指定する式として、定数や変数、計算式などがあります。

範囲定数

範囲定数は、値の範囲を表す範囲型を定義するための定数です。

書式

《開始値》《終了値》

例文

30~50のすべての値についてそれぞれ繰り返す
  値を報告する
繰り返し終わり


変数

値を記憶するものです。
利用する前に型を宣言する必要はありません。

メッセージは、「こんにちは」
メッセージを表示する

また、配列や連想配列(辞書)も利用することができます。
詳しくは、「配列」の章または「辞書」の章をご覧ください。

型宣言すると、その型以外の値を入れられません。

変数名

変数に付ける名前を「変数名」と呼びます。
変数の名前には、漢字やひらがな、カタカナ、全角半角英数字を使うことができます。

プロデルでは、英数字については大文字・小文字、全角と半角を区別しません。

次のような名前の変数は、すべて同じ変数として扱われます。

  • 変数ABC123
  • 変数ABC123
  • 変数abc123

例えば、次のように「全角小文字のa」と「半角大文字のA」は、同じ変数として扱われます。

a=10
Aを報告

ただし、次のような文字を、変数名にすることはできません。

  • 全角・半角数字のみ  例:123
  • 全角・半角数字で始まるもの 例:2009年データ
  • スペースや括弧、「!」などの記号が含まれるもの 例:!ファイル
  • 改行やタブなどの制御文字が含まれるもの
  • +-などの演算記号が含まれるもの 例:1-3組

変数へ値を代入する (代入文)

変数へ値を格納するには、次のように命令します。

書式

《変数名》は、《入れる値》

《変数名》には、変数の名前(変数名)を書きます。
変数名は、日本語またはアルファベットを使うことができます。

《入れる値》には、文字や数値、変数を書きます。

例文

メッセージは、「こんにちは」
メッセージを表示する

値の格納には、このほかに、3つの書き方があります。
書き方が異なるのみで、動作には違いはありません。

書式

《変数名》《入れる値》とする

《変数名》《入れる値》

《変数名》《入れる値》を代入する

例文

Aを10とする
A=120
メッセージへ「こんにちは」を代入する

みなす文

指定した配列の要素の内容を、変数一覧で指定した変数へ順番に代入します。

書式

《配列》《変数一覧》とみなす

《配列》
代入元となる配列

《変数一覧》
配列の要素を代入する変数の一覧(配列定数の形式で指定します)

例文

入力値は、{「山田太郎」,23,「神奈川県足柄下郡箱根町」}
入力値を{名前,年齢,住所}とみなす
名前を表示する
年齢を表示する
住所を表示する

変数定義式(【 】)

変数を定義することを表す式です。

この定義式をプログラム文中で指定すると、その名前の変数を、その宣言がある有効範囲内で使用することを宣言します。

変数定義式は、変数名を【 】で囲って指定します。また、変数名の後に:を付けて型名を指定することで、その変数の型を固定できます。

例文 プログラム文での局所変数の宣言

//変数宣言

//型を明示した変数宣言
値:文字列

//変数宣言
は、「こんにちは」

手順定義では、変数宣言式の表記を、その名前の仮引数を使用することの宣言に指定します。
なお、手順定義の場合に限り、【 】の代わりに[ ]を使えます。

例文 手順定義での仮引数の宣言

自分入力文字列を設定する手順

終わり


算術式

式には、値を取得できる手順や計算式があります。
これらは、[ ]や( )で囲むことで、明示的に式であることを表すことができます。

プロデルで計算できる演算

プロデルでは、四則演算など次の演算ができます。

記号 意味
足し算
引き算
*(×) かけ算
/(÷) わり算
累乗(べき乗)
 4^2 → 42=16
10^10 → 1010=1000000000(1E+10)
整数の割り算の商(あまりを出すわり算)
 10¥3 → 3
整数の割り算の余り(剰余)
 10%9 → 1

例文

100*1.8を表示する


オブジェクトアクセス式

オブジェクトアクセス式は、特定の種類のインスタンス(オブジェクト)の設定項目や種類変数にアクセスするための式です。

書式

《オブジェクト名》《設定項目/種類変数》

例文

メッセージは、「こんにちは」
メッセージのカタカナ
を表示する


値とデータ型

プロデルで扱うことができる値には、大きく次の2種類あります。


値型

値型には、次の型があります。

  • 固定小数
  • 長整数
  • 整数
  • 浮動小数
  • 倍浮動小数

プロデル内部で値型は、1つの変数または1つの式評価ごとにオブジェクト型にボクシングされるため、実際に使用されるメモリ容量はこのビット数よりも多くなります。

値型は、変数に代入するときに値だけがコピーされます。
手順呼び出しの際に値型の変数を指定した場合は、値渡しになります。

オブジェクト型

「作る」命令によって作られた「種類」のインスタンスは、すべてオブジェクト型です。

オブジェクト型は、変数に代入するときにオブジェクトへの参照がコピーされます。

手順呼び出しの際にオブジェクト型を指定した場合は、参照渡しになります。


数値

数値には、次のデータ型があります。

  • 固定小数
  • 長整数
  • 整数
  • 浮動小数
  • 倍浮動小数

数値は、すべて値型として扱われます。これらの数値型は、格納できる値の範囲や使用するメモリ容量が異なります。

値型名 格納できる値の範囲 ビット数
整数 -2,147,483,648~2,147,483,647 32
長整数 -9,223,372,036,854,775,808~9,223,372,036,854,775,807 64
浮動小数 約7桁 32
倍浮動小数 約15~16桁 64
固定小数 約28~29桁 128

なお、これらの型をまとめて数値型と呼ぶことがあります。

数値定数

プログラムで具体的な数字(リテラル)を指定すると、プロデルが解析時にその数値を格納できる型に調整します。

数値は、全角、半角を問いません。負の数や小数点も表すこともできます。
なお、数値を文字列として扱いたい場合は、文字列として「 」で囲みます。

123を表示する

16進数定数表記

数値を16進数表記で指定するには、先頭に「0x」を付けて書きます。

0xFFを表示する

 

数値の変換

数値型の場合で、型が異なる変数に代入しようとすると、自動的に(暗黙的に)値の変換が行われます。

例文

次のプログラムでは、1.5が代入されている浮動小数である【値1】を、整数である【値2】へ代入しています。

【値1:浮動小数】は、1.5
【値2:整数】は、値1
値2を表示する

値1と値2は型が異なるため、値1を値2へ代入するときに、値変換が行われます。
具体的には、小数部分が切り捨てられて、1.5から1へ値変換されます。小数は四捨五入されません。

プロデルでは、変換前後の型に関係なく、すべて自動的に変換されます。
値変換の時に、変換前の値が、変換後の範囲に収まらない場合は、切り捨てられるか正しく変換されないことがあります。

変換後に切り捨される型は次の通りです。

  整数へ 長整数へ 浮動小数へ 倍浮動小数へ 固定小数へ
整数から -
長整数から -
浮動小数から 切り捨て 切り捨て -
倍浮動小数から 切り捨て 切り捨て -
固定小数から 切り捨て 切り捨て -

○=正しく変換されます △=変換後の範囲に収まる場合は正しく変換されます
切り捨て=小数が切り捨てられます

文字列との変換

数値型の値を文字列型の変数へ代入する時には、数値型が数字に変換されて文字列となります。

文字列型の値を数値型の変数へ代入する時には、文字列である数字が数値に変換されて数値型の値となります。

値変換の誤差

コンピュータの性質上、計算を行う際にわずかな計算誤差が生まれることがあります。

例えば、次のようなプログラムを実行すると、
本来は0.1と表示されるべきところが0.1000061と誤った結果になります。

295.5-295.4を表示する

この現象は、プロデルの不具合ではなく、小数点を含む数値をメモリ上に格納する際に起こります。
このようにほとんど等しい小数点以下の計算を正確に行いたい時は、計算誤差が生じる可能性が少ない、
固定小数型の変数に代入してから計算すると、誤差を回避できます。

【値1:固定小数】は、295.5
【値2:固定小数】は、295.4
値1-値2を表示する

なお、整数型ではこのような誤差は発生しないため、10倍した値を整数型として格納しておき、必要に応じて1/10にすると言った工夫も考えられます。


文字列

文字列とは、文章やテキストなどの1文字以上の文字の集まりを表します。

文字列定数

文字列を表す場合は、「 」で囲みます。

こんにちはを表示する

文字列結合演算子 (&)

式と式を一つの文字列として連結するための記号です。

右辺または左辺に、文字列型以外の式を指定した場合には、その値を文字列に変換してから連結されます。

例文

名前は、「プロデル」
メッセージは、名前「さん、こんにちは」
メッセージを表示する

文字列内での式展開

文字列(「 」)の中に、数値、変数、式を[ ]で囲むことで、文字や計算式を組み合わせて、一つの文字として表すことができます。

例文

次の例では、計算式をメッセージ文字列中に書いています。
このプログラムが実行されると、[ ]に書かれた式が計算され、式の評価結果(計算結果)に置き換わります。

値段は、120
「お会計は、値段×1.08円です。」を表示する

“]”や“」”を入力するには

“[”や“」”は、特別な意味を持つ記号のため、文字列中に直接書くことはできません。

これらの文字を表示するには、次のように[ ]で入力したい文字のみを書きます。

プロデル][日本語]」を表示する

文字列定数の特殊な書き方の例

結果の文字列 プログラム内の書き方
「こんにちは」 「「「こんにちは」」」
「「 「「「「」」

ヒアドキュメント

プログラムに書いた文字列をそのまま指定するには、ヒアドキュメントを使います。
ヒアドキュメントは、「「 」」構文で書きます。ヒアドキュメントで指定した文字列は、[ ]による式展開が適用されません。

通常の「 」で囲った文字列定数構文では、“[”と“]”が式展開を表す記号であり、
また“」”が文字列の終わりを表す記号になっています。
「「 」」構文では、“[”, “]”, “」”の記号が通常の文字として扱われるためこれらの文字をエスケープする必要がなくなります。

ヒアドキュメントを使うことで例えば、正規表現やSQLを書く目的で文字列定数を使う場合に[や]の記号を配慮せずに指定できます。

構文の比較

ーー時刻が評価されます
「 [時刻] 」を表示する

ーー書いたまま表示されます
「「 [時刻] 」」を表示する


配列

配列要素への代入

配列要素は、変数名に続けて要素番号(添字)を( )で囲んで書きます。
要素番号は、1から始まります。

プロデルの配列は、特に宣言しない限り、可変長配列として扱われ、事前に配列の個数や型を宣言する必要はありません。

添字に要素数よりも大きい値を指定して値を代入すると、その添字までの要素が自動的に確保されます。

書式

ーー文字や数値を格納する
《変数名》《番号》)は、《式》

ーー値を取得する
《変数名》《番号》)を表示する

例文 配列の操作

「果物」配列の1番目から3番目までに文字を格納して、順に表示しています。

果物(1)は、「りんご」
果物(2)は、「バナナ」
果物(3)は、「ぶどう」
果物(4)は、「なし」

果物(1)を表示する
果物(2)を表示する
果物(3)を表示する
果物(4)を表示する

一度に配列へ値を格納する (配列定数)

上記の例では、変数の1番目から3番目までに順番に文字を格納していますが、
{ }を使うことで、配列へ一度に値を格納することができます。

書式

ーー配列へ一度に格納する
《変数名》は、{《1番目の値》《2番目の値》《3番目の値》、・・・}

例文 配列へ一度に格納する

果物は、{「りんご」、「バナナ」、「ぶどう」、「なし」}
果物(2)を表示する  ーー「バナナ」と表示されます

明示的な配列の宣言

変数宣言式を使って明示的に変数を配列として宣言できます。

書式

【《変数名》:《型》の配列】

固定長配列

固定長配列は、要素数が予め定められた配列型です。

変数宣言式を使って配列の型と要素数を宣言できます。

書式

【《変数名》:《型》の配列(《要素数》)】

例文

固定長配列は、「固定長配列」種類からインスタンスを作ることで利用できます。この際に、配列の要素数を指定しておきます。

【一覧:整数の配列(10)】は、固定長配列(10)を作ったもの
一覧(1)は、「こんにちは」
一覧(11)は、「こんにちは」
一覧(1)をコンソールへ表示する

「すべて」後置子

「すべて」後置子によって、配列のすべての要素に対して式が評価され(展開し)た結果を、それぞれ配列に格納することができます。「すべて」後置子を指定すると、「すべて」に掛かる式を含んでいる式や文が、「すべて」に掛かる配列の要素それぞれだけ、評価されて、配列として表されます。

{120,160,220}すべてに1.08を掛けたものを出力する

この場合は、次の文と同じ意味となります。

ーーすべて後置子を使わない例
{120に1.08を掛けたもの,160に1.08を掛けたもの,220に1.08を掛けたもの}を出力する

「すべて」後置子は、計算演算子、設定項目、実補語に指定することができます。

例文 すべて後置子で配列各要素のオブジェクトの設定項目を取得する

次の例文では、「リスト」にあるすべて「注文明細」要素の「価格」のみが展開された後に、その結果を要素である配列がさらに展開されます。

Aという注文明細を作る
Bという注文明細を作る
Cという注文明細を作る
リストは、{A,B,C}
リストすべての価格すべてを報告する

注文明細とは
  +価格=10の乱数*10
終わり

戻り値の無い手順の実補語が「すべて」を含む場合は、手順が「すべて」に掛かる配列の要素の数だけ実行されます。

上記の「リストすべての価格すべてを報告する」の部分は、「リストすべての価格」の配列の要素をそれぞれ展開して手順を実行しますので、次のプログラムと内容は同じです。

ーーすべて後置子を使わない例
Aの価格を報告するの価格を報告する


辞書(ハッシュテーブル)

辞書要素への代入

辞書は、見出し語(キーワード)を手がかりに、文字列や数値などの値を格納できる型です。
また見出し語は、文字列のみ指定可能です。

変数に対して添字に見出し語を指定して代入することで辞書型として格納されます。事前に型を宣言する必要はありません。

書式

ーー辞書で文字や数値の格納
《変数名》《見出し》)は、《入れる値》
《変数名》
《見出し》は、《入れる値》

ーー値の取得
《変数名》(《見出し》)を表示する
《変数名》《見出し》を表示する

例文 辞書の操作

値段表(「りんご」)は、「120円」
値段表(「バナナ」)は、「80円」
値段表(「ぶどう」)は、「300円」
値段表(「りんご」)を表示する

車の「色」は、「白」
車の「色」を表示する

一度に辞書へ値を格納する (辞書定数)

{ }を使うことで、辞書へ一度に値を格納することができます。

書式

ーー辞書へ一度に格納する
《変数名》は、{《見出し》《入れる値》《見出し》《入れる値》、・・・}

例文 辞書へ一度に格納する

値段表は、{りんご=「120円」、バナナ=「80円」、ぶどう=「300円」}
ーー「80円」と表示されます
値段表(「バナナ」)を表示する


プロデルの文は、次のように分類できます。


命令文の構造

プロデルでは、コンピュータに行わせる処理の一つ一つを「命令文」で書きます。
命令文は、書かれた順に実行されていきます。

命令文は、動詞と引数(ひきすう)に分かれます。

例えば、前の章で取り上げたメッセージを表示する命令文について説明します。

「こんにちは、プロデルへようこそ」を表示する

この命令文の場合、

『表示する』が、動詞です。
『「こんにちは、プロデルへようこそ」を』が、引数です。

「表示する」手順の場合、画面に表示する内容は、助詞「~を」でつながる部分で指定しなければなりません。

どの動詞では、どの助詞を書く必要があるのかについては、手順の定義によって異なります。
手順の定義について詳しくは、プロデル リファレンスで説明しています。

 

引数について

必要な情報として指定する「引数」と「助詞」は、ペアになっています。
手順によっては、複数の「引数・助詞」のペアを指定する場合があります。

次の例では、引数・助詞のペアが2つあります(「~を」と「~へ」)。

「文章.txt」をデスクトップへコピーする。

手順に必要な助詞が含まれていれば、ペアの順番に関係なく正しく解釈されます。
例えば、次のように引数・助詞のペアを入れ替えて書いても、正しく動作します。

デスクトップへ「文章.txt」をコピーする。

なお、命令文には句読点を付けることもできます。

デスクトップへ、「文章.txt」を、コピーする。

 

補語のスタック

プロデルの手順呼び出し文では、引数に相当する補語にスタック方式を採用しています。

構文解析時、補語はスタックに格納された後、動詞に係る助詞を含んだ補語であれば、スタックから取り出します。スタックに残った補語はその後の動詞に係ります。

動詞の送りがな

命令文の動詞の送りがなは、解釈上意味がないため、決まった書き方はありません。

「表示する」命令の場合も、次のように書くこともできます。

「おはよう」を表示
「こんにちは」を表示しろ
「こんばんわ」を表示しなさい

なお、プロデルでは否定形に対応していないため、「~しない」と書いた場合も、命令を実行します。

 

読点「。」について

プロデルでは、原則として一行に一つの命令文を書くことができます。

ただし、読点「。」を付けることで一つの行に複数の命令文を書くこともできます。

「文章.txt」を削除する。「完了しました」を表示する


手順呼び出し文

手順とは、文をまとめたプログラムの単位です。

補語と助詞

補語とは、式と

動詞

動詞とは、手順名の一部で動詞を表します。
動詞は、呼び出し文の末尾に書きます。

プロデルでは、日本語の文章に近い形で命令を書きます。

「文章.doc」をデスクトップへコピーする

手順呼び出し文は、次のような書式で書きます。

書式

《値》《助詞》・・・《手順名》

《オブジェクト名》《値》《助詞》・・・《手順名》

【値】【助詞】

「○○を」「○○へ」にあたる部分です。
(一般に引数(ひきすう)と呼ばれるものにあたります)

助詞の順序は決められておらず、「、」やスペースによる分かち書きも不要です。

ただし、「を」「へ」「に」以外の助詞が指定された場合、命令が正しく解釈できないことがあります。
このような場合は、【手順名】の直前に、「、」を付けることで、正しく解釈することができます。

また、【値】には、以上の文法をさらに書くことができますが、助詞がもとの命令の助詞と重複し、正しく解釈することが出来ない場合は、
【値】に指定する助詞と命令を[ ]または( )で囲み、明示的に指定してください。

【手順名】

手順の名前を書きます。
指定できる手順は、【オブジェクト名】で指定したオブジェクトによって異なります。
オブジェクトの種類によって使うことができる手順を調べるには、「リファレンス」をご覧ください。

【オブジェクト名】

命令したいオブジェクトを指定する場合に書きます。
オブジェクトとは、プログラムで扱うデータや動作を、種類ごとにまとめた部品です。
オブジェクトによって、指定できる【手順名】が異なります。

オブジェクトについては、「種類」の章で解説しています。

 

値を取得できる場合

手順呼び出し後にその実行結果が返される場合は、その結果を値として指定できます。

書式

《変数名》は、《値》《助詞》・・・《動詞》したもの

《変数名》は、《オブジェクト名》《値》《助詞》・・・《動詞》したもの

「~したもの」は、省略することができます。

《値》には、文字や数値を書きます。
《変数名》には、一般に文字や数値を格納することができる箱の名前を書きます。(変数については「変数」をご覧ください)
《オブジェクト名》には、ウィンドウやボタンと言った部品や種類を書きます。(部品や種類については「手順と種類」をご覧ください)


繰り返し文

同じ命令を繰り返して実行するには、「繰り返し」文を使います。

繰り返し文には、いくつかの書き方があります。

  1. 指定した回数だけ繰り返す
  2. 変数が指定した値になるまで繰り返す
  3. 条件に応じて繰り返す
  4. 無制限に繰り返す
  5. 配列の内容に応じて繰り返す

 

1.指定した回数だけ繰り返す

指定した回数だけ、命令を繰り返すには、次のように書きます。

書式

《繰り返す回数》回、繰り返す

  /* 繰り返す命令文 */

繰り返し終わり

《繰り返し回数》で、繰り返し回数を書きます。

例文 3回「わん」を表示する

3回、繰り返す
  「わん」を表示する
繰り返し終わり

繰り返した回数をカウントする

繰り返した回数を変数にカウントするには、次のように書きます。

書式

《繰り返す回数》 《変数名》にカウントしながら 繰り返す

  /* 繰り返す命令文 */

繰り返し終わり

《変数名》に、カウントを行う変数を書きます。

例文 3回、カウントする

3回、にカウントしながら繰り返す
  「[値]回目です。」を表示する
繰り返し終わり

2.変数が指定した値になるまで繰り返す

指定した範囲で、処理を反復するには、次のように書きます。

書式

《変数名》 《初期値》から 《増減数》ずつ増やしながら 《最終値》まで 繰り返す

  /* 繰り返す命令文 */

繰り返し終わり

《変数名》に、カウントする変数を書きます。
《初期値》に、変数の初期値を書きます。(省略可能)
《増減数》に、一回実行するごとに加算する数値(マイナスを含む)を書きます。省略すると1と同じです。
《最終値》に、変数の最終値を書きます。(省略可能)

例文

10から2ずつ増やしながら20まで繰り返す
  値を表示する
繰り返し終わり

3.条件に応じて繰り返す

特定の条件に応じて繰り返すことができます。

条件を満たしている間は繰り返す

書式

《条件式》の間、繰り返す

  /* 繰り返す命令文 */

繰り返し終わり

《条件式》が成立している(○である)間、繰り返します。

例文 1から5まで表示します

値は、1
(値が5以下)の間、繰り返す
  値を表示する
  値は、値+1
繰り返し終わり

条件式を満たすまで繰り返す

書式

《条件式》になるまで繰り返す

  /* 繰り返す命令文 */

繰り返し終わり

《条件式》が成立する(○になる)まで繰り返します。

例文 1から5まで表示します

値は、0
(値が5)になるまで繰り返す
  値は、値+1
  値を表示する
繰り返し終わり

4.無制限に繰り返す

繰り返し文で、繰り返し条件を省略すると、無制限に繰り返します。
繰り返しから抜け出す場合は、「繰り返しから抜ける」命令を使います。

無限に繰り返すには、次のように書きます。

書式

繰り返す

  /* 繰り返す命令文 */

繰り返し終わり

例文 [いいえ]をクリックするまで繰り返します

繰り返す
  「続けますか?」を質問したものを結果へ入れる
  もし結果が「いいえ」なら、繰り返しから抜ける
繰り返し終わり

5.配列の内容に応じて繰り返す

配列の内容に対して、繰り返し処理を行う場合は、「それぞれ繰り返し」文を使います。
配列については、「配列」の章をご覧ください。

書式

《配列》《要素変数》へそれぞれ繰り返す

  /* 繰り返す命令文 */

繰り返し終わり

《配列》
繰り返す内容が含まれる配列を書きます。

《要素変数》
それぞれの配列の要素を格納するための変数を書きます。

例文 配列の内容を順番に表示します

一覧は、{「N-03B」,「F-04B」,「P-09A」,「SH-08B」}

一覧要素へそれぞれ繰り返す
  要素を表示する
繰り返し終わり

日本語らしい書き方

それぞれ繰り返し文は、次のように書くこともできます。

名前一覧は、{「裕太」,「健司」,「智美」,「直子」}

名前一覧のすべての名前について『
  名前を表示する
』ことをそれぞれ繰り返す

 

繰り返しの動きを変える

繰り返し文の動作を変えることができます。

繰り返しを抜ける

繰り返し回数に関係なく、繰り返しから抜け出すには、「繰り返しを抜ける」文を使います。

3回、変数にカウントしながら繰り返す
  「わん」を表示する
  繰り返しを抜ける
繰り返し終わり

繰り返しを続ける

繰り返し文の処理を飛ばして、処理をはじめに戻すには、「繰り返しを続ける」文を使います。

3回、繰り返す
  「わん」を表示する

  繰り返しを続ける

  //この次からは実行されません
  「にゃん」を表示する
繰り返し終わり

「繰り返し終わり」を省略する

ブロック文を使って、次のように書くこともできます。

書式

《繰り返す回数》回、『/* 繰り返す命令文 */』ことを繰り返す

例文 3回「わん」を表示する

3回『
  
「わん」を表示する
』ことを繰り返す


判断文

指定した判断式に応じて、処理を分岐するには、「もし」文を使います。

判断文の書き方

判断文は、次のような書式で書きます。

書式

もし《条件》なら /* 正しい時の命令文 */ でなければ /* 違う時の命令文 */

もし《条件》なら

  /* 条件が正しいときに実行する命令文 */

もし終わり

《条件》

判断する条件式を書きます。
または、真偽値を書くこともできます。

条件が正しくない場合

条件式が正しくないときに、実行するプログラムを書くことができます。

書式 条件が正しくない

もし《条件》なら

  /* 条件が正しいときに実行する命令文 */

そうでなければ

  /* 条件が違うときに実行する命令文 */

もし終わり

条件が違った時に、次の条件について判断させることもできます。

書式 複数条件分岐

もし《条件》なら

  /* 条件が正しいときに実行する命令文 */

他でもし《条件》なら

  /* 最初の条件が違い、次の条件が正しいときに実行する命令文 */

そうでなければ

  /* すべての条件が違うときに実行する命令文 */

もし終わり

※「そうでなければ」のほか、「でないなら」、「他なら」と書くこともできます

例文 文字列の判断

メッセージは、「こんにちは」

もしメッセージが「こんにちは」なら
  「正しい」を表示する
そうでなければ
  「違います」を表示する
もし終わり

条件式によって処理を分岐する

他でもし”を使うことで、条件に応じて、実行する命令を書くことができます。

数字は、1
もし数字が1なら
  ーー1の時
  処理1
他でもし数字が2なら
  ーー2の時
  処理2
でないなら
  ーーそれ以外の時
  処理3
もし終わり

例文 数値の比較

正解は、123
数字は、入力画面で「数値を入力してください」を入力したもの

もし数字
が正解なら
    「正しい」を表示する
他でもし数字が正解より大きいなら
  「[数字]より小さい」を表示する
他でもし数字が正解より小さいなら
  「[数字]より大きい」を表示する
もし終わり

条件式を数学表記で書くこともできます。

正解は、123
数字は、入力画面で「数値を入力してください」を入力したもの

もし数字
=正解なら
    「正しい」を表示する
他でもし数字≧正解なら
  「[数字]より小さい」を表示する
他でもし数字≦正解なら
  「[数字]より大きい」を表示する
もし終わり

条件の書き方

書くことができる条件式は、次のようになります。

条件式

優先度 条件式の表記 意味

□=◇ □と◇が等しい
  □≠◇ □と◇が等しくない
  □>◇ □が◇より大きい
  □<◇ □が◇より小さい
  □≧◇ □が◇以上
  □≦◇ □が◇以下
  【条件式】でない 【条件式】が正しくない
  □が◇ □と◇が等しい
  □が◇より大きい □が◇より大きい (□>◇と同じ)
  □が◇より小さい
□が◇未満
□が◇より下
□が◇より小さい (□<◇と同じ)
  □が◇以上 □が◇以上 (□≧◇と同じ)
  □が◇以下 □が◇以下 (□≦◇と同じ)
  《条件式1》または《条件式2》
《条件式1》あるいは《条件式2》
《条件1》か《条件2》のどちらかが正しい

《条件式1》かつ《条件式2》 《条件1》と《条件2》のどちらも正しい

※“□◇”の代わりに“□が、◇”、“□は、◇”と書くこともできます。

2つ以上の条件を同時に判断する

「かつ」と「または」を使って複数の条件を書くことができます。
( )で囲うこともできます。

例文

数字1は 1
数字2は 2

ーーすべての式が正しい時(And)
もし数字1が1かつ数字2が1なら、「どっちも正しい」を表示する

ーーどれかの式が正しい時(Or)
もし(数字1が1)または(数字2が3)なら、「どっちか正しい」を表示する


分岐文

一つの変数に対して、その値ごとに複数の処理を分ける場合は、「分岐」文を使います。

分岐分は、次のように書きます。

書式

《変数名》について分岐
《文字または数値》の場合

分岐終わり

《変数名》
分岐の比較を行う変数を書きます。

《文字または数値》
判断する値を書きます。
ここには、文字または数値のみを書くことができます。
変数を書くことはできません。

例文 おみくじプログラム

数値は、0から5までの乱数
数値について分岐
0の場合
   「大吉」を表示する
1の場合
   「凶」を表示する
2の場合
   「小吉」を表示する
他の場合
   「中吉」を表示する
分岐終わり


ブロック式

ブロック文は、手順を式として渡すための表現です。
ブロック文を使うことで、匿名手順を定義できます。

文は、「こんにちは」を表示する
文を実行する

匿名手順とクロージャ

プロデルのブロック式は、実行時に評価されると「匿名手順」種類のオブジェクトとなります。
このオブジェクトの「実行する」手順が実行されたときは、ブロック式が評価された時の有効範囲が適用されます。

例文

例えば、次のプログラムでは、「閉包処理を実行した」時には、
「クロージャを生成する」手順にある「A」変数の有効範囲が適用されます。

つまり、本来は、「クロージャを生成する」手順で宣言した「A」変数は、手順が終わると使えなくなりますが、
ブロック式を書いて、匿名手順にすることで、手順が終わった後でも「A」変数を使えるようになります。

閉包処理は、クロージャを生成したもの

5回、繰り返す
  閉包処理を実行したものを報告する
繰り返し終わり

クロージャを、生成する手順
  【A】=0
  『A=A+1。Aを返す』を返す
終わり

このように、ブロック式を使うことによって、本来の変数の有効範囲を超えて変数を使うことができる仕組みを
一般にクロージャと呼びます。


例外監視文

ファイルが見つからないなどのエラーが発生したときにそれを処理する(例外処理する)プログラムを書くには、例外監視文を使います。

例外監視文を使うことで、エラーが発生したときに独自のエラーメッセージを表示したり、
処理をやり直したりすることができます。

例外の種類

例外には、次のものがあります。

  • プロデルのライブラリで起こる例外
  • プログラム内で発生させる例外

例外監視文の書式

例外監視文は、次のように書きます。

書式

例外監視
  /* 監視するプログラム */
発生した場合
  /* 発生したときに実行するプログラム */
監視終わり

例外を起こさせる

例外監視文は、次のように書きます。

書式

エラーを発生させる

《メッセージ》というエラーを発生させる

例文 ファイルが見つからなかった時に、警告メッセージを表示します

例外監視
  内容は、「abc.txt」から読み込んだもの
発生した場合
  「ファイルが見つかりません!!」を警告アイコンで表示する
監視終わり

例文 特定の場合の例外を発生させます

内容は、「」
例外監視
  もし内容が「」なら、「値を入力してください」というエラーを発生させる
発生した場合
  エラーのメッセージを警告アイコンで表示する
監視終わり


参照文

参照文は、指定するプロデルファイルにおいて定義されている種類や手順を取り込む際に指定します。
参照文を書くと、その参照文があるプロデルプログラムの一部として宣言されているものとして扱われます。

「参照する」文

プロデルファイルを読み込み、そのファイルにある手順や種類を利用できる状態にします。

なお、プロデルデザイナがプロジェクトモードの時は、自動的に参照されるため、この手順を書く必要はありません。

書式

《プロデルプログラム名》を参照する

例文

「ライブラリ.rdr」を参照する


「利用する」文

指定したプロデルプラグインをプログラムで利用することを宣言します。
プロデルプラグインを読み込み、利用できる状態にします。

または、指定したファイルを素材として利用することを宣言します。

書式

《プロデルプラグイン》を利用する

《プロデルプラグイン》
プログラム内で利用するプロデルプラグインのファイル(DLLまたはEXE)を指定します。

プロデルプラグイン以外のDLLファイルは、指定できません。

例文

プロデルプラグインを読み込み、利用できる状態にします。

「Produire.WinControl.dll」を利用する

プロデルプラグインの検索順

プロデルプラグインは、次の優先順位で探します。
優先順位が高いフォルダにあるプラグインが読み込まれます。

  1. プログラムがあるフォルダ
  2. プロデルデザイナがあるフォルダのpluginsフォルダ

実行可能ファイルへの埋め込み

「利用する」文で指定したファイル(プラグインを含む)は、実行可能ファイルの作成時に実行可能ファイルに埋め込まれます。

なお、プロデルファイル内で一つも「利用する」文がない場合、プロデルデザイナが自動的に利用しているプラグインを実行可能ファイルへ埋め込みます。


素材リスト

プログラム中で使用する画像などの外部リソースを、素材リストに登録する際に「利用する」文で指定します。
素材リストに登録すると、実行可能ファイルの作成時に、関連するリソースとして実行可能ファイルに同梱されます。

書式

《ファイル名》を素材として利用する

ファイル名》
素材として利用するファイルを指定します。
ここで指定した素材は、「素材リスト」種類で取得することができます。

例文

「画像.png」を素材として利用する


プリプロセッサ, アノテーション (※)

プログラムに対する設定や情報を記述するため記号です。
コメント(注釈)を書く場合には、「//」、「ーー」または「/*」~「*/」を使います。

指定できるプリプロセッサ

※宣言必須 変数を必ず宣言しなければいけないことを宣言します。
このプリプロセッサが宣言されていると、【 】などで変数宣言されていない変数を
指定することができません。
※コンソール コンソールアプリケーションであることを宣言します。
プロデルデザイナでは、コンソールアプリケーションとして実行されます。
※ウェブアプリ ウェブアプリケーションであることを宣言します。
プロデルデザイナでは、プロデル簡易Webサーバを起動してページを開きます。
※プラグインなし 実行可能ファイルにプラグインを同梱しないことを宣言します。
プロジェクトモードの場合はこの設定が適用されません。
※管理者実行
管理者として実行できる実行可能ファイルを作成します。
この機能は、プロデルデザイナで開発者キーが設定されているときに有効です。

指定できるアノテーション

※よみがな 指定された種類または手順の読み仮名
※説明 メソッドや種類の説明を表します。プロデルデザイナのアドインツール「RdrDoc」で出力されるHTMLに表示されます。

例文

※コンソール
「こんにちは」をコンソールへ表示する


手順

プログラムの小さな固まりに分けたものを「手順」と呼びます。

他のプログラミング言語では、関数やメソッドと呼ばれるものに相当します。

手順定義の書き方

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

書式

《手順名》手順

  /* この手順が呼び出されたときに実行する命令文 */

終わり

《手順名》には、手順の名前(動詞)を書きます。

例文

挨拶する

挨拶する手順
  「こんにちは」を表示する
終わり

引数を持つ手順定義

手順を実行する際に、必要な情報(引数)を指定する場合は、次のように書きます。

書式

《変数名》《助詞》・・・、《手順名》手順

  /* この手順が呼び出されたときに実行する命令文 */

終わり

《変数名》
必要な情報を格納する変数の名前を書きます。

《助詞》
《変数名》
と対応づけられる助詞を書きます。

《手順名》
手順の名前を書きます。

“[《変数名》]《助詞》”の部分を実補語と呼び出します。
実補語は、必要な数だけ書きます。その際は“、”で区切って書きます。

例文

次の例では、人を紹介するメッセージを表示するための「紹介する」という手順を定義して呼び出しています。

「太郎」へ「次郎」を紹介する

[相手]へ、[名前]を、
紹介する手順
  「[相手]さん、こちらは[名前]さんです。」を表示する
終わり

実補語の省略

省略する実補語を〈 〉で囲むことで、手順を呼び出すの際に、その補語にある助詞を省略できます。

例文

「あああ」を処理する
「いいい」を「へ」で処理する

【値】を〈【オプション】で〉処理する手順
  もしオプションが無でないなら「オプション:[オプション]」を報告する
  値を報告する
終わり

形式補語

手順名は、単に動詞であるほかにも、述語と動詞を含めて手順名としたい場合があります。

プロデルでは、《手順名》に助詞(「を」「から」「まで」「へ」)が含まれる場合に、助詞で終わる句を形式補語として扱って、残りの句を動詞としています。
つまりプロデルの手順名は、1つの動詞と、0個以上の形式補語で構成されています。

形式補語は、手順名の一部である補語のことです。実補語は手順の引数を表す補語であるのに対して形式補語は、引数としての意味はありません。ただし、実補語と形式補語は、文法上同列に扱われるため、手順を呼び出す際に順番を入れ替えて書けます。

例文 手順名に形式補語が含まれる手順

次のプログラムでは、「データを抽出する」という名前の手順を宣言しています。手順名のうち「データを」という句が形式補語として定義されます。
そのため、例文のように形式補語(データを)と実補語(~を)とは、書く順番を変えられます。

「データ.csv」からデータを抽出する
データを「データ.csv」から抽出する

【ファイル名】からデータを抽出する手順
  ファイル名を報告する
終わり


局所変数を宣言する

手順内で、次のように書くことで、手順内だけで有効な変数(局所変数)を宣言することができます。

詳しくは、有効範囲をご覧ください。

《変数名》《種類名》

戻り値の型を指定する

指定した型の戻り値を、必ず返すことを明示する場合は、次のように書きます。

書式

《手順名》手順:《戻り値の型》

終わり

《手順名》には、手順の名前を書きます。
《戻り値の型》には、戻り値となる種類を書きます。

《戻り値の型》を指定した手順では、「~を返す」文を使って、必ず戻り値を返す必要があります。

結果を返す

手順で行った処理の結果として、戻り値を返すことができます。

手順の戻り値を返すには、次のように書きます。

書式

《戻り値》を返す

《戻り値》で手順を抜ける

《戻り値》
手順の結果として返す戻り値を書きます。

特殊な書き方の手順 

計算を行う手順や、真偽値判定する手順など、手順の役割によっては、次のような形で書くこともできます。 なお、“:《戻り値の型》”は、書かずに省略することもできます。

《手順名》かどうかを判定する手順:《戻り値の型》

終わり

《手順名》を求める手順:《戻り値の型》

終わり

例文

平均値を求める手順

  10を返す

終わり

例文

正解かどうかを判定する手順

  ○を返す

終わり


種類

「種類」とは、複数の手順や変数を機能ごとに分類して、まとめたものです。

プログラムが大きくなると、手順や変数をたくさん作ることになり、整理する必要があります。
種類を使うことで、手順や変数を一つの固まりにまとめることができます。

また、「作る」文を使うことで、種類のコピー(インスタンス)を生成することができます。

種類を作ることで、オブジェクト指向のプログラムを作ることができます。
種類を「継承」することもできます。

 

種類は、一般のプログラミング言語では、クラスと呼ばれるものに相当します。
しかし、宣言した種類はインスタンスを作成することなく、静的に呼び出して利用することができるなど、
JavaやC#におけるクラスとは異なる点もあります。
また、プロデルでは型を宣言する必要がないため、オーバライドなども異なります。

種類の書式

種類を定義するには、次のように書きます。

種類宣言の書式

《種類名》とは

  /* この中に種類内の手順や変数を書きます */

終わり

種類の生成

定義した種類にある手順や変数は、そのまま使うことができますが、
「作る」文を使うことで、同じ手順や変数を持つ種類を、コピーして作ることができます。

書式 「作る」文 (宣言した種類の生成)

《オブジェクト名》という《種類名》を作る

 

種類が持つ変数

種類の定義の上で、変数名を指定すると、その変数は種類に属する変数(フィールド)となります。

変数定義上の変数の宣言は、様々な表現がありますが、
すべて「持つ」「持ち」のいずれかが含まれています。

書式 種類変数宣言(日本語表記)

《変数名》を持つ
《種類名》である《変数名》を持つ

例文

マイカーという車を作る
マイカーの名前は、「カローラ」

車とは
  名前を持つ
終わり

次のようにUML風に書くこともできます。

例文 種類変数宣言(UML風表記)

《修飾子》《変数名》《種類名》
《修飾子》《変数名》《種類名》=《値》

例文

マイカーという車を作る

車とは
  +名前:文字列=「リーフ」
終わり

種類が持つ手順

種類内に手順の定義を書くことで、種類に属する手順を書くことができます。

例文

種類の中に「鳴る」という手順を作ります。

トラックという車を作る
トラックを鳴らす

車とは

  [自分]を、鳴らす手順
    「ブッーブッー」を表示する
  終わり

終わり

種類が持つ設定項目

種類に、設定項目(プロパティ・属性)を定義することができます。 

取得する際の手順

種類の【設定項目名】に対し、設定項目が取得された際に実行する手順(ゲッター)を定義します。
設定項目の結果は、「返す」文を書きます。

《設定項目名》を取得する手順
  《内容》を返す
終わり

設定する際の手順

種類の【設定項目名】に対し、設定項目へ設定する際に実行する手順(セッター)を定義します。
設定項目へ設定する値は、「設定値」変数に格納されます。

《設定項目名》を設定する手順

終わり

取得と設定の手順をまとめる

設定項目を取得する手順と設定する手順を一つにまとめることもできます。

《設定項目名》という属性

 取得する手順
  《内容》を返す
 終わり

 設定する手順

 終わり

終わり

例文

利用者の年齢は、10
利用者の年齢を表示

利用者とは
  歳を持つ

  年齢という属性

    設定する手順
      歳は、設定値
    終わり

    取得する手順
      歳を返す
    終わり

  終わり
終わり

初期化するための特別な手順(コンストラクタ)

「作る」文によって、種類が作成される際に最初に実行される手順です。
多くの場合、変数の初期化などの処理を書きます。

はじめの手順

終わり

コンストラクタにパラメータを渡す場合には、次のように( )で囲ってカンマ区切りで指定します。

コンストラクタには、実補語(助詞)を指定することはできません。

はじめ(名前,年齢)の手順

終わり

 

解放するための特別な手順(デストラクタ)

種類が使用されず、削除される場合に実行する手順です。
種類が不要になった際に、関連する変数や機能を終了させる際に使用します。
プログラムの終了時や不要なメモリ領域が整理される際に自動的に実行されます。

助詞を書くことはできません。

終わりの手順

終わり

 

「作る」文の初期値の指定 (名前付き引数)

「作る」文で種類を生成すると同時に、生成後のオブジェクトの設定項目や種類変数の初期値を指定できます。

この文法によりプログラムの簡略表記が可能になります。
なお、初期値が指定できるのは、すでに定義してある設定項目か種類変数のみとなります。

例文 「作る」文で種類変数の初期値を指定する

池という円(半径15,位置{10,10})を作る
円とは
 +半径
 +位置
終わり

例文 「作る」文で設定項目の初期値を指定する

窓というウィンドウを作る
窓に了解というボタン(幅100,高さ30,位置{50,50},内容「了解!」,見た目「フラット」,背景色黄色)を作る
窓を表示する
待機する

イベント手順を利用する

「作る」式で【変数名】を指定すると、生成されたオブジェクトのイベント手順と、同じ種類スコープにある手順が自動的に対応付けられます。
イベント手順に対応付けられる手順は、名前が次のような書式で指定された手順です。

  • 《変数名》の《イベント手順名》時
  • 《変数名》が《イベント手順名》時

OKボタンというボタンを作る


OKボタンがクリックされた時の手順
  //対応付けられます
終わり

イベント手順を定義する

種類宣言の中で「発生する」文を使ってイベント手順を定義できます。

イベント手順を定義すると、オブジェクトで発生したイベントをオブジェクト外部の手順で受け取ることができます。

マイカーという車を作る
マイカーの到着した時の手順は、到着した
マイカーが到着する

到着した手順
  「到着しました。[改行][この時の緯度][この時の経度]」を情報アイコンで表示する
終わり

車とは
  // イベント手順を定義します
  到着した時に発生する

  【自分】が、到着する手順
    // イベント手順を発生させます
    情報という到着イベント情報を作る
    情報の緯度は、35.681382
    情報の経度は、139.766084
    情報で到着した時を発生させる
  終わり
終わり

// イベント手順が発生したときに使用する付加情報
到着イベント情報とは
  イベント情報を継承する
  +緯度
  +経度
終わり


種類の継承

「種類」とは、複数の手順や変数を機能ごとに分類して、まとめたものです。

プログラムが大きくなると、手順や変数をたくさん作ることになり、整理する必要があります。
種類を使うことで、手順や変数を一つの固まりにまとめることができます。

また、「作る」文を使うことで、種類のコピー(インスタンス)を生成することができます。

種類を作ることで、オブジェクト指向のプログラムを作ることができます。
種類を「継承」することもできます。

 

種類は、一般のプログラミング言語では、クラスと呼ばれるものに相当します。
しかし、宣言した種類はインスタンスを作成することなく、静的に呼び出して利用することができるなど、
JavaやC#におけるクラスとは異なる点もあります。
また、プロデルでは型を宣言する必要がないため、オーバライドなども異なります。

書式

《もとの種類の名前》を受け継ぐ

別の種類にある手順や変数を受け継いだ新しい種類を作ります。

継承した種類に、さらに手順や変数を追加して定義することができます。

一つの種類で、受け継げる種類の数は、1つです。

プラグインのオブジェクトから継承することもできます。
例えば、ウィンドウを引き継いて、それぞれの機能に合わせたウィンドウを種類として作ることができます。

例文

車を受け継いだ消防車という種類を作ります。
消防車には「サイレン」という手順だけが書かれていますが、
車を受け継いでいるため、「鳴る」という手順を呼び出すこともできます。

消防車がサイレン
消防車が鳴る

消防車とは
  車を受け継ぐ

  [自分]が、サイレンの手順
    「ウーウー」を表示する
  終わり

終わり

車とは

  [自分]が、鳴る手順
    「ブッーブッー」を表示する
  終わり

終わり

手順の上書き

継承先の種類にて、継承元にある手順と引数が同じ手順を新たに上書き定義できます。

同じ種類内の手順内で、レシーバ補語を省略すると、継承元の種類で呼び出した場合であっても、継承先の手順が優先されて呼び出されます。

レシーバ補語(「自分」)を明示的に指定すると、手順が継承先の手順で上書きされた場合でも、呼び出した種類を基準にして定義された手順が呼び出されます。

車Aという車改を作る
車Aが名前を表示する

車とは
  +名前

  [自分]を命名する順
    名前は、「テスト車」
  終わり

  [自分]が、名前を表示する手順
    自分を命名する  //同じ種類で定義された手順(車:命名する)が呼び出されます。
    命名する  //オーバライドされた手順(車改:命名する)が呼び出されます。
    名前を報告する
  終わり
終わり

車改とは
  車を受け継ぐ

  [自分]を命名する手順
    名前は、「テスト車改」
  終わり
終わり

同じ手順名のオーバロード

通常は、ひとつの種類で、同じ名前の手順を定義することはできません。

ただし、手順に必要な情報(引数と助詞)やその数が違えば、同じ名前の手順を複数作ることができます。
このような同じ名前の手順でも、必要な情報が違う手順を定義することを手順のオーバロードと呼びます。 

例文 手順のオーバロード

次の例では、犬種類に、引数の型が異なる「見る」手順が2つ定義されています。
この2つの手順は、「~を」で指定した対象に応じて実行する手順が変わります。

ぽちという犬を作る
健太という家族を作る
山田さんという知らない人を作る
ぽちが健太を見る
ぽちが山田さんを見る

犬とは
  [自分]が、知らない人である[人]を、見た手順
    「ワン!ワン!ワン!」を表示する
  終わり

  [自分]が、家族である[人]を、見た手順
    「きゅうきゅん」を表示する
  終わり
終わり

人とは

終わり
知らない人とは
  人を継承する
終わり
家族とは
  人を継承する
終わり

手順オーバロードの規則

同じ名前の手順を複数作る条件には、次の点が関係します。オーバロードできる手順を定義するには、同じ名前の他の手順と、引数の数、助詞、引数の型が違っている必要があります。

  • 引数の数・・・引数は、変数と助詞の組みを表します。
  • 助詞・・・助詞とは、“を”や“へ”など、引数に添えられる識別子です。
  • 引数の型・・・引数の型とは、引数の変数の型です。「○○である」や「:○○」などで書くことで指定します。

オーバロードできる例

1.次の例は、引数の数が異なるので、同じ名前の手順を定義できます。

[ファイル名]を[ソフト名]で開く手順

終わり

[ファイル名]を開く手順

終わり

2.次の例は、引数の個数と変数の名前、引数に添えられた助詞は同じですが、引数の型が異なるので、同じ名前の手順を定義できます。

数値である[値]を足す手順

終わり

文字列である[値]を足す手順

終わり

3.次の例は、引数の個数と引数の型は同じですが、引数に添えられた助詞が異なるので、同じ名前の手順を定義できます。

文字列である[名前]と、走る手順

終わり

文字列である[名前]へ、走る手順

終わり

オーバロードできない例

次の例は、引数の名前は異なりますが、引数の型と引数に添えられた助詞、その数も、同じなため同じ名前の手順を定義できません。

文字列である[ソフト名]を起動する手順

終わり

文字列である[ファイル名]を起動する手順

終わり

参照・利用を限定する

種類に属する変数または手順、設定項目は、他の種類からの利用を制限することができます。

例えば、種類内部でのみの利用を想定した手順に対しては他の種類から実行できないようにすることや、種類所属する変数を他の種類から操作できないようにすることができます。 

識別子 意味 説明
+ 公開 変数へ設定・取得できる範囲は制限されません。(Public)
- 非公開 同じ種類にある手順からのみ利用することが可能です。(Private)
# 限定 同じ種類にある手順や継承された種類にある手順からのみ利用することが可能です。(Protected)
~ 内部限定 (現在は無効)同一プログラム内から利用することが可能です。(Internal)
(なし)   通常は「+」(公開)と同じ制限になります

例文

車の名前は、「ベンツ」
車の色は、「黒」
車の持ち主名は、「カイル」
車の名前を表示する

車の暗証番号を表示する ーー見ることができない
車が内部処理する ーー実行できない

もし[車が「1212」で、持ち主]なら
  「この車の持ち主です」を表示する
そうでなければ
  「この車の持ち主でありません」を表示する
もし終わり

車とは
  +名前
  +色
  +持ち主名
  -暗証番号

  -[自分]が、内部処理する手順
    暗証番号は、「1212」
  終わり

  [自分]が、[キー]で、持ち主かどうかを判定する手順
    内部処理する
    もしキーが、暗証番号なら
      ○を返す
    でなければ
      ×を返す
    もし終わり
  終わり

終わり

抽象的な種類

抽象的な種類は、生成できない種類であることを指定します。
このキーワードが指定された種類にて定義された手順や変数は、継承した種類から利用できます。

実装なしの種類 (インタフェース)

実装なしの種類が手順定義の先頭のみでプログラム文本体を含まないことを指定します。
このキーワードが指定された種類は、インタフェースとして扱われ、具体的な本題がない型情報のみが宣言でます。
他の種類で実装することで使用します。

例文

実装なし(インタフェース)の種類である「水中生物」種類と「生物」種類を定義して、
その両者を実装する「魚」種類を定義するプログラム例です。

【さかな:水中生物】
さかなという魚を作る

//次のように書いて、実装なし種類を生成することはできません
さかなという水中生物を作る

水中生物とは
  実装なし

  [これ]が、泳ぐ手順
  終わり
終わり

生物とは
  実装なし

  [これ]が、生まれる手順
  
  終わり
終わり

魚とは
  水中生物を実装する
  生物を実装する

  [これ]が、泳ぐ手順
    「すいすい」を表示する
  終わり
  [これ]が、生まれる手順
    「うまれる」を表示する
  終わり
終わり

単一種類 (シングルトン)

種類が単一種類(シングルトン)であることを指定します。
このキーワードが指定された種類は、プログラム中で1回だけ自動的にインスタンスが生成されます。
「作る」文によってインスタンスを作ることはできません。
オブジェクトに種類名を直接指定することでその種類の手順や変数を利用できます。

例文

スカイツリーの高さを報告する

//次ように書いてインスタンスは生成できません
タワーというスカイツリーを作る
タワーの高さを報告する

スカイツリーとは
  単一種類
  +高さ=634
終わり


有効範囲

有効範囲(スコープ)とは、代入したり宣言したりした変数または、宣言した手順が使える範囲を表します。
変数は、有効範囲の中で使うことができ、有効範囲を超えると変数の内容を取得できなくなります。
手順は、有効範囲の中で呼び出すことができ、有効範囲を超えた場所からは呼び出せません。

プロデルでは、有効範囲の単位として次のような範囲があります。

  • プログラム全体 (変数・手順)
  • 種類内部 (変数・手順)
  • 手順内部 (変数)
  • 制御文(もし文・繰り返し文)内部 (変数)
  • ブロック式内部 (変数)

変数の暗黙宣言と明示的宣言

プロデルの変数は、便宜上、明示的に宣言することなく、使うことができます。
変数に対して値を代入した時点で、暗黙的に変数が宣言されたものとして扱われ、変数を使えるようになります。
暗黙的に変数を宣言した場合、変数の有効範囲は、その変数が代入された手順が属する種類内部となります。
手順が種類に属していない場合は、プログラム全体となります。

一方、変数を特定の有効範囲内でのみ使いたい場合(ローカル変数として使いたい場合)は、
【 】を使って変数を明示的に宣言する必要があります。
明示的に変数を宣言した場合、変数の有効範囲は、その変数が宣言された場所と同じ有効範囲となります。
例えば、手順内部で変数宣言した場合は、有効範囲が手順内部になります。

プログラム全体

プログラム全体は、プロデルプログラムに含まれるすべての種類・手順を対象とします。
プロジェクトモードの場合は、プロジェクトに含まれるすべてのプロデルプログラムのすべての種類・手順を対象とします。

有効範囲の対象

宣言・代入場所

プログラム冒頭で、宣言または初めて代入した変数は、プログラム全体が有効範囲になります。
プログラム冒頭とは、プロデルデザイナでの「(全体)の(はじめ)」にあたる部分を指します。

有効範囲

有効範囲がプログラム全体である変数・手順は、プロデルプログラム内のすべての種類・手順から使えます。

種類内部

種類内部は、一つの種類に含まれるすべての手順を対象とします。

宣言・代入場所

種類の「はじめ」の手順または種類の宣言領域で、宣言または初めて代入した変数は、種類内部が有効範囲になります。
種類の宣言領域とは、種類内部のうち、手順内部ではない部分を指します。

例えば、種類内部が有効範囲の変数を明示的に宣言するには、次のように書きます。

車とは
  +名前
終わり

また、次のように「はじめ」の手順で「名前」変数に値を代入した時も、「名前」変数の有効範囲は、種類内部になります。

車とは
  はじめの手順
    名前は、「太郎の車」
  終わり
終わり

有効範囲

有効範囲が種類全体である変数・手順は、その種類内のすべての手順から使えます。

なお、種類内の変数や手順が公開状態場合(+記号で宣言した場合)は、
種類名を指定すれば、その種類以外の有効範囲から使えます。

例文

例えば、次のようなプログラムでは、「車」種類にある「名前」変数は、同じ種類内にある手順では「名前」と書けば使えます。
それ以外の種類の手順からは、「車の名前」と書ければ使えます。

名前を表示する  //名前という変数はありません
車の名前を表示する

車とは
  +名前

  はじめの手順
    名前は、「太郎の車」
  終わり

  走る手順
    名前を表示する
  終わり

終わり

手順内部

手順内部とは、一つの手順の中にある文を対象とします。

明示的に変数を宣言した場合

手順で変数を宣言すると、変数の有効範囲は、手順内部になります。
また、手順の仮引数の有効範囲も、手順内部になります。

有効範囲が手順内部である変数は、その手順内でのみ使えます。

例文

例えば、次のプログラムにある「走る」手順では、
「名前」変数を宣言していますので、変数の有効範囲は、その手順内部となります。
そのため、それ以外の手順からは、「名前」変数を使えません。

車とは

  走る手順
    【名前】
    名前は、「太郎の車」
  終わり

  止まる手順
    名前を表示する  //「名前」という変数はありません。
  終わり

終わり

この有効範囲で代入した場合

宣言せずにはじめて代入した変数は、種類内部が有効範囲になります。
種類に属さない手順の場合は、プログラム全体になります。

例文

例えば、次のプログラムにある「走る」手順では、
「名前」変数へ値を代入しているだけなので、変数の有効範囲は、種類内部となります。
そのため同じ種類のそれ以外の手順からも、「名前」変数を使えます。
ただし、手順が属する種類の以外からは、使えません。

車とは

  走る手順
    名前は、「太郎の車」
  終わり

  止まる手順
    名前を表示する
  終わり

終わり

掃除する手順
  名前を表示する  //「名前」という変数はありません。
終わり

制御文内部

制御文内部とは、一つの制御文の中にある文を対象にします。
有効範囲が個別に決められている制御文は、「もし」文と「繰り返す」文だけです。
それ以外の制御文は、手順内部の有効範囲のままとなります。

制御文の有効範囲

明示的に変数を宣言した場合

もし文・繰り返す文で変数を宣言すると、変数の有効範囲は、制御文内部になります。

有効範囲が制御文内部である変数は、その制御文内でのみ使えます。

例文

例えば、次のプログラムのもし文の内部では、
「A」変数を宣言していますので、変数の有効範囲が制御文内部となります。
そのため、もし文が終わると、「A」変数は使えなくなります。

もし値が1なら
  【A】=10
そうでなければ
  【A】=20
もし終わり
Aを報告する  //Aという変数はありません

この有効範囲で代入した場合

宣言せずにはじめて代入した変数は、種類内部が有効範囲になります。
種類に属さない手順の場合は、プログラム全体になります。

例文

例えば、次のプログラムにあるもし文の内部では、
「A」変数に値を代入しているだけなので、変数の有効範囲は、種類内部になります。
種類に属さない手順の場合、変数の有効範囲はプログラム全体になります。
もし文が終わっても、「A」変数を使えます。

もし1=1なら
  Aは、10
そうでなければ
  Aは、20
もし終わり
Aを報告する

ブロック式内部

ブロック式内部とは、一つのブロック式の中にある文を対象にします。

ブロック式内部の有効範囲

明示的に宣言した場合

ブロック式の中で変数を宣言すると、変数の有効範囲は、そのブロック式内部になります。
有効範囲がブロック式内部である変数は、そのブロック式内でのみ使えます。

例文

例えば、次のようにブロック式内部で宣言した「A」変数は、変数の有効範囲がブロック式内部となります。
そのため、ブロック式が終わると「A」変数は使えません。

『【A】=1。A=A+1』を実行する
Aを報告する  //Aという変数はありません

この有効範囲で代入した場合

宣言せずにはじめて代入した変数の有効範囲は、ブロック式を書いた手順が属する種類内部になります。
種類に属さない手順の場合、プログラム全体になります。

PAGE TOP