HYPER MIKAN BOX
検索
最近の変更
メディアマネージャー
サイトマップ
文書の表示
以前のリビジョン
バックリンク
ログイン
トレース:
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== プロシージャ ====== プロシージャは他の多くの言語で言うところの関数です。プロシージャは''proc''を使って新しく定義できます。 <codeprism lang=nim> proc add(a, b: int): int = a + b echo add(1, 2) #=> 3 </codeprism> ''proc''は値を返すことが出来るので、まるで関数のようです。Nimには''func''というキーワードもあります。これは関数型プログラミングの純粋関数により近いものです。また、''method''というキワードもあります。現段階では''func''と''method''は忘れていおいて''proc''に注力します ====== 戻り値 ====== 先のaddの例では、最後の式である''a + b''が戻り値になりました。プロシージャの戻り値がどのように決定されるかは、次のルールに従います。 * ''result''という名前の変数が使用されていた場合、その値が戻り値となる * return文がある場合、それに続く式の値が戻り値になる * 式を伴わないreturn文がある場合、''return result''と同じ意味になる * ''result''もreturn文もない場合、プロシージャの最後の式が戻り値となる 先のaddの例では、最後のルールが適用さました。他のルールを適用することも出来ます。 ''result''という名前の変数が使用されていた場合、その値が戻り値となる: <codeprism lang=nim> proc add(a, b: int): int = result = a + b </codeprism> return文がある場合、それに続く式の値が戻り値になる: <codeprism lang=nim> proc add(a, b: int): int = return a + b </codeprism> 式を伴わないreturn文がある場合、''return result''と同じ意味になる: <codeprism lang=nim> proc add(a, b: int): int = result = a + b return </codeprism> このプロシージャを''add(1, 2)''と呼び出した場合、いずれも最初の例と同じである''3''が戻り値になります。 ====== パラメーター ====== パラメーター(parameters)とはプロシージャの引数を指します。プロシージャの呼び出し時に渡される値はアーギュメント(arguments)と読んで区別することが出来ます。Nimに限ったことではなくプログラミング一般において、必要なときにのみparametersとargumentsを使い分けることが多いです((日本語の古い資料だと仮引数と実引数に分けているものもあります。個人的な意見を言うと、どっちが「仮」でどっちか「実」か覚えておかなければならず、脳みそに無駄な負担かけるので、この名称は好ましくないと思っています。))。どちらを指しているかは文脈から明らかなことが多いので、最近は単に引数とだけ呼ばれるのが普通です。 先のaddを例に取ると、aとbがパラメーターで、その型はintです。パラメーターはイミュータブルです。つまり、プロシージャ内で変更することは出来ません。 次のコードはコンパイルに失敗します。 <codeprism lang=nim> proc setToOne(x: int) = x = 1 # コンパイルエラー </codeprism> エラーメッセージは次のとおりです。 Error: 'x' cannot be assigned to ''var''キーワードを付けることで、プロシージャ内で値を変更できます。 <codeprism lang=nim> proc setToOne(x: var int) = x = 1 var x = 100 setToOne(x) echo x #=> 1 </codeprism> プロシージャ内での変更が呼び出し元にまで影響を与えている、すなわち、参照渡しとなっていることに注意してください。 ====== 戻り値を無視する ====== Nimでは、値を返すプロシージャの呼び出しで、その戻り値を無視することは出来ません。 <codeprism lang=nim> proc add(a, b: int): int = a + b add(1, 2) # コンパイルエラー </codeprism> 次のプログラムはコンパイルできません。エラーメッセージは次のようになります。 Error: expression 'add(1, 2)' is of type 'int' and has to be used (or discarded) エラーメッセージで指摘されている通り、戻り値を使用するか、破棄される(discarded)必要があります。破棄するにはdiscard文を使います。 <codeprism lang=nim> discard add(1, 2) </codeprism>
文書の先頭へ