入力と出力を扱う関数は、IOモジュールで提供されています。
標準出力に文字列を書き込むには、IO.putsを使います。IO.putsは、文字列の末尾に必ず改行を追加します。その動作が不要な場合は、代わりにIO.writeを使いましょう。どちらの関数も、成功するとアトム:okを返します。
IO.puts("Hi!")
# > Hi!
# => :ok
IO.putsは文字列の書き込みには便利ですが、それ以外の用途にはあまり向いていません。任意の値を標準出力に書き込めるデバッグ用のツールが必要なら、代わりにIO.inspectを使いましょう。IO.inspectは、渡された値をそのまま返すので、コードの好きな位置に挿入できます。また、:labelをはじめとする多くのオプションを受け付けるので、他のIO.inspectの呼び出しと区別できます。
標準入力から1行読み込むには、IO.getsを使います。IO.getsは引数を1つ受け取ります。これは、入力のプロンプトとして表示される文字列です。IO.getsはプロンプトのあとに改行を追加しません。必要な場合は、自分で含めてください。
IO.gets("What's your name?\n")
# > What's your name?
# < Mary
# => "Mary\n"
友達と一緒に、ペンと紙で遊ぶロールプレイングゲームを楽しんでいます。ただ、新しい人をグループに迎えるのはなかなか難しいことに気づきました。キャラクター作成でつまずいてしまい、どこから始めればよいかわからない人が多いのです。そこで、新しいプレイヤーを手助けするために、その流れを案内してくれる小さなプログラムを書くことにしました。
RPG.CharacterSheet.welcome/0関数を実装しましょう。歓迎のメッセージを出力し、:okを返します。
RPG.CharacterSheet.welcome()
# > Welcome! Let's fill out your character sheet together.
# => :ok
RPG.CharacterSheet.ask_name/0関数を実装しましょう。質問を出力して答えを待ち、前後の空白を除いた答えを返します。
RPG.CharacterSheet.ask_name()
# > What is your character's name?
# < Mathilde
# => "Mathilde"
RPG.CharacterSheet.ask_class/0関数を実装しましょう。質問を出力して答えを待ち、前後の空白を除いた答えを返します。
RPG.CharacterSheet.ask_class()
# > What is your character's class?
# < healer
# => "healer"
RPG.CharacterSheet.ask_level/0関数を実装しましょう。質問を出力して答えを待ち、答えを整数として返します。
RPG.CharacterSheet.ask_level()
# > What is your character's level?
# < 2
# => 2
RPG.CharacterSheet.run/0関数を実装しましょう。新しいプレイヤーを歓迎し、キャラクターの名前、クラス、レベルを尋ね、キャラクターシートをマップとして返します。また、"Your character"というラベルを付けてマップを出力します。
RPG.CharacterSheet.run()
# > Welcome! Let's fill out your character sheet together.
# > What is your character's name?
# < Mathilde
# > What is your character's class?
# < healer
# > What is your character's level?
# < 2
# > Your character: %{class: "healer", level: 2, name: "Mathilde"}
# => %{class: "healer", level: 2, name: "Mathilde"}