tsucchi’s diary(元はてなダイアリー)

はてなダイアリー(d.hatena.ne.jp/tsucchi1022)から移行したものです

「初めての Ruby」一人勉強会6日目

最近少々サボり気味でしたが、Ruby をぼちぼち勉強しています。


教材はコレ↓
初めてのRuby


今日は第5章。入出力

これを読みつつ、つぶやいてみます。

以下、つぶやきメモ。

※1 今のところ、正直あまり Ruby は好きではありません。
※2 オイラがまともにそこそこ書ける言語は C#, Java(5.0より前), Perl です。言語の機能を語っているときはその辺との比較になっているはず
※3 Ruby はまだほとんど理解していないので、的外れでトンチンカンな批判してるかも
※4 コードはサンプルそのままのときと、オイラが勝手に変えてるときがあります

ブロック (p.87 例5-2)
#!/usr/bin/ruby

File.open("a.rb") { |f|
  contents = f.read
  print contents
}

明示的にクローズしなくても、ブロックを抜けると勝手にリソースを開放してくれる。C# の IDisposable + using みたいなもん。オイラは open したらすぐ close 書いて、次に本処理書くようにしているからなぁ。。。まあ言語側でやってくれる方が便利だね。

ファイルからの入力(p.89 例5-5)
#!/usr/bin/ruby

File.open("a.rb") { |f|
  f.each_line do |line|
    print "#{f.lineno} : #{line}"
  end
}

多分これが一番基本的なファイル読み込みなのでメモメモ。

ARGF (p.92 例5-10)

Perl の <> みたいなもんだね。

ファイル出力

あり?ファイルへの書き込みがなかったや。こんな感じみたい。

#!/usr/local/bin/ruby

File.open("aaa.txt", "w") { |f|
  f.puts("aaa")
  f.puts("bbb")
}

定番ネタの「ファイルを読んで、そのままコピーする」のはこんな感じ?ちょっと冗長な気がするなぁ...

#!/usr/local/bin/ruby
File.open("a.rb") { |infile|
  File.open("a.rb.copied", "w") { |outfile|
    infile.each_line do |line| 
      outfile.puts line
    end
  }
}

5章は短かったので、何とか一日で終りました。ちょっと理解が浅い気がするので、後日復習しないとなぁ...

6章に続く(多分)