Aug 13, 2013

第2章 必ず帰って来てねの巻 前篇

あんたー!待ってるからねーーー!!

。。。さて、タイトルの意味は後々長々と語るとして、

今回は、いつもお世話になっているforループの話です。
大体の言語には、構文としてforが準備されていると思います。
java, c, php ... 大体のプログラム言語には、for文ありますよね?

しかし、Erlangをそこら辺の言語と一緒にしちゃダメですよ。
彼からすると

「for文?なにそれおいしいの?」

な状態です。
つまり、for文なんていう高度な技は、
Erlangでは使用できません!以上。

以上じゃねえ!!\(゜ロ\)(/ロ゜)/

じゃあ繰り返し操作とかどうすんじゃ?
大丈夫です。安心してください。できます。
彼もやればできる子なのです。

ではでは、それを語るためには、「関数型言語」なので
繰り返し操作を語る前にまずは「関数」について語りたいと思うのじゃ。。。

関数を定義しよう


まずは、関数について、これは、JavaやC言語と同じように
Erlangでも処理の結果を返却するように「関数」の定義が可能です。


ではではまずは、与えられた引数を足し算して返却するような簡単な関数を考えてみましょう。

Javaで書くとこんな感じでしょうか。メソッド[add]を定義してみます。
public int add(int num1, int num2) {
    return num1 + num2
}

ではではお待ちかね、Erlangで書くとこうなります。
Erlangで関数[add]を定義してみます。
add(Num1, Num2) ->
    Num1 + Num2.

以上です。簡単な関数の定義については、ほかの言語と、ぱっと見た感じ
あまり変わりません。

因みにFunctionの定義をするときには、

[関数名](引数たち) ->
    [関数でやりたい処理]
.

こんな感じで定義します。そんなに難しくないでしょ?今のところは。。。

しかし、上記の例だけでもちょっと「?」な部分があります。

関数の戻り値

Erlangでは、Functionは「常に戻り値を返却する」必要があります。

!!\(◎o◎)/!

まぁそこまでビビる話ではないのですが、Erlangではvoidは使えません。
常に何かしらの結果値を返却する必要があります。
たとえば、今更ながらにHello Worldを書いてみましょう。

ではでは、Erlangエミュレータを起動してみましょう~。

※ Erlangエミュレータの起動方法は、Linux上もしくは、Windowsのコマンドラインから
  ErlangをインストールしたフォルダのbinにPATHを通した状態で、erlコマンドを実行してください。
  Windowsの場合は、
  スタート>プログラム>Erlang OTP R[インストールしたバージョン]>Erlang
  で起動すると専用のWindowsアプリケーションが起動するのでこちらのほうが便利かもです。

起動が終わったら下のコマンドを実行しましょう

> io:format("Hello world~n").
Hello world
ok
>


こんな感じに出力されたと思います。
この自分で入力した、"Hello World"以外にokなる出力が出てきてますが、
これは、io:format/1の戻り値です。

それと、もうひとつ重要なのが、

全てのErlangプログラムの式についても戻り値が返却される

ということです。関数内においては
最後に実行した式の結果値が返却されます。
因みに後々説明しますが、

if文やcase文も戻り値を返却します!

。。。意味不明。。。orz

まずは、その話は置いておいてっと、

関数のさわりはこれだけ、覚えていればOKです。
因みに最後に上記のFunctionをちゃんとビルドして実行できるようにしておきましょう。

まずは、[sample.erl]なるファイルを準備してください。
で、細かい話は後々しますので、以下の内容を書き殴りましょう。

% モジュールの定義をします
% ここにはファイル名と同じ名前を定義してください。
-module(sample).

% モジュールの外部に公開するFunctionを定義します。
% ここでは、addを外部公開しましょう
-export([add/2]).

add(Num1, Num2) ->
    Num1 + Num2.

上記のファイルが準備できたら、そのファイルを保存したフォルダ上で
Erlangエミュレータを起動してください。

※ Erlangエミュレータの起動方法は、Linux上もしくは、Windowsのコマンドラインから
  ErlangをインストールしたフォルダのbinにPATHを通した状態で、
  erlコマンドを実行してください。

起動したら、以下のコマンドを実行しましょう。
このコマンドは、erlファイルをコンパイルして中間ファイルbeamファイルを
生成して、モジュールをロードしてくれるコマンドです。
んー簡単いうと、作ったFunctionを実行できるようにする呪文です。


> c("sample").
{ok, sample}
>


で、ここで{ok, sample}と結果が返却されていれば準備OKです。
ではでは、実行してみましょう。


> sample:add(1,2).
3
>


無事作った関数が、実行できました!

やっふー!

さて、これでようやくFor文の説明の前準備ができました。。。が!!

次回に続く!!!

次回予告

For文についてなんて1ページで十分と思って書き始めたのに
さっくり説明するだけでもかなりの行数になってしまっため2話構成になってしまった!!

次回「必ずかえって来てねの巻 後編」 この次もサービスはないのです。

No comments:

Post a Comment