読者です 読者をやめる 読者になる 読者になる

技術のメモ帳

気が向いたときに書いてます

elixir学習日誌: 標準入出力..例外処理

Elixir

標準入出力

IO.puts :stdio, "fantastic!"
IO.puts :stderr, "goddness!"

標準入力

case IO.gets "What's your name?: " do
  "Tom\n"    -> IO.puts "Oh! Tom. Good name."
  "Jesica\n" -> IO.puts "Jesica! How are you?"
  _          -> IO.puts "Nobody knows you"
end

ファイル操作

File.write! "fruits.txt", "apple\norange\nbanana\n"
list = File.read! "fruits.txt"
IO.puts list

Path操作

Path.join "foo", "bar" # => foo/bar
Path.expand "~/baz"    # => /home/Users/baz

標準入出力・ファイル・PathはすべてRubyっぽい。

例外処理

どんな言語でもお馴染みの例外処理です。

try do
  raise "Oh! My goddness."
rescue
  e in RuntimeError -> IO.inspect e
after
  IO.puts "What's up?"
end

Ruby訳すると分かりやすい。

begin
  raise "Oh! My goddness."
rescue => e
  puts e.inspect
ensure
  puts "What's up?"
end

また、try...catchの使い方もある。

try do
  throw "hello"
catch
  t -> IO.inspect t
end

再びRuby訳。これは少しニュアンスが変わりそうだけど、シグナルを受け取って、処理を抜ける意味では同じかな。

catch :hello do
  3.times do |i|
    throw :hello if i == 2
  end
end

参考