数字を当てる」ゲームを書いて、知っている言語と比較することで、Elixirプログラミング言語を学びます。
新しいプログラミング言語をよりよく学ぶためには、主流の言語に共通する機能のいくつかに焦点を当てるのが最善の方法です:
- 変数
- 表示式
- ステートメント
これらの概念は、ほとんどのプログラミング言語の基礎となっています。このような共通点があるため、あるプログラミング言語を使いこなせば、その違いを比較することで別のプログラミング言語に慣れることができます。
新しいプログラミング言語を学ぶもう一つの良い方法は、簡単な標準プログラムを書き始めることです。こうすることで、プログラム自体のロジックではなく、言語に集中することができます。この連載では、コンピュータが1から100までの数字を選び、それを当てるように要求する「Guess the Number」プログラムを使います。このプログラムは、あなたが正しく数字を当てるまでループします。
番組「Guess the Number」は、プログラミング言語の以下の概念を使用しています:
- 変数
- 入力
- 出力
- 条件判定
- ループ
これは、新しいプログラミング言語を学ぶのに最適な練習方法です。
Elixir による数当てゲームの実装
Elixir 動的型付けされた関数型プログラミング言語で、安定した保守性の高いアプリケーションを作るために設計されています。Elixirは Erlang 同じ仮想マシン上で動作し、Erlangの長所の多くをよりシンプルなシンタックスで取り入れています。
Elixir版「数字当てゲーム」を書いて、この言語に触れてみてください。
defmodule Guess dodef guess() dorandom = Enum.random(1..100)IO.puts "Guess a number between 1 and 100"Guess.guess_loop(random)def guess_loop(num) dodata = IO.read(:stdio, :line){guess, _rest} = Integer.parse(data)cond doguess < num ->IO.puts "Too low!"guess_loop(num)guess > num ->IO.puts "Too high!"guess_loop(num)true ->IO.puts "That's right!"Guess.guess()
Elixirでは、変数名の後に=記号を続けることで、変数に値を代入します。例えば、random = 0 という式はランダム変数に 0 を代入します。
コードはモジュールを定義することから始まります。Elixir言語では、名前付き関数を含むことができるのはモジュールだけです。
その直後のコード行は、エントリー関数 guess()定義しています:
- 乱数整数を得るために
Enum.random()関数を呼び出します。 - プリントゲームのヒント
- ループ実行関数の呼び出し
残りのゲームロジックは guess_loop() 関数に実装されています。
推測ループ()関数は 末尾再帰を使って ループを実装します。Elixirでループを実装する方法はいくつかありますが、末尾再帰はより一般的なものの1つです。推測ループ()は最後に自分自身を呼び出します。
guess_loop() 最初の行はユーザー入力を読み取ります。次の行は、入力を整数に変換するために parse() 関数を呼び出します。
cond式はElixir版の多重分岐式です。他の言語の if/elif 式や if/elsif 式とは異なり、Elixir では最初の分岐と分岐のない最後の分岐を区別しません。
このcond式には3つの分岐方法があります: 推測値がより大きいか、小さいか、または乱数と等しいかです。最初の2つのオプションは不等式の方向を出力し、関数の最初に戻って再帰的に guess_loop() を呼び出します。最後のオプションは That's right を出力し、関数を終了します。
出力例
Elixir コードを書いたら、それを実行して「数当てゲーム」をしましょう。プログラムを実行するたびに、Elixir は異なる乱数を選び、正解を見つけるまで当て続けることができます:
$ elixir guess.exsGuess a number between 1 and 001Too highToo highToo highToo lowToo highToo lowThat's right!
数当てゲーム」は新しいプログラミング言語の入門として最適です。このシンプルなゲームを異なる言語で実装することで、各言語の中核となる概念を練習し、その詳細を比較することができます。
お気に入りのプログラミング言語はありますか?あなたならそれを使って「数字当てゲーム」をどのように書きますか?このシリーズの記事をたどって、興味のありそうな言語の他の実装をご覧ください。




