photo credit: Kmark via photopin cc
Ruby を初めて 2日目。
Railsチュートリアル第4章で Ruby の基本的な使い方を学んだ。
Ruby を使って驚いたことがいくつかあったのでまとめておく。
(プログラミング経験はそれなりにある。C# や JavaScript, PHP など)
Rubyist の方は、初めて Ruby に触れたときのことを思い出すきっかけに。
非Rubyist の方は、Ruby に興味を持ってもらえるきっかけになれば。
なお、いくつかのコードは Railsチュートリアルから抜粋している。
end はあるけど begin しない
多くの言語では関数やブロックを中括弧で括る。
Pascal 系言語では begin 〜 end で括る。
Ruby では begin なしで急に end が出てくる。
if string.empty? "string is empty!" else "string is not empty!" end
考えてみれば begin のきっかけになる if 文や for 文(Ruby では each)が目印になる。
だから begin がなくても成り立つのか、と納得させられた。
配列のインデックスにマイナスが入る
配列にマイナスのインデックスでアクセスすると、今までの言語ではエラーとなったり、メモリの怪しいところにアクセスする。
これが Ruby では -1 は配列の最後、-2 ならその手前、-3なら・・・となる。
>> a = [1..5] => [1, 2, 3, 4, 5] >> a[2..(a.length-1)] => [3, 4, 5] >> a[2..-1] => [3, 4, 5]
インデックスで落ちないための設計というわけではなく、array[array.length] にアクセスすると nil が返る。(デフォルトの場合)
array[0..-1] とすればすべての値を取得できる。
length を取る手間が省けて嬉しい。
関数に丸かっこがいらない
今までの言語では、メソッドには丸かっこがつきもの。
丸かっこがなければプロパティという切り分けだった。
これが Ruby では丸かっこを省略できる。
def string_message(string) if string.empty? "string is empty!" else "string is not empty!" end end >> string_message("test") => "string is empty!" >> string_message "test" => "string is empty!"
これは・・・微妙な気がする。
前向きに捉えれば丸かっこはキーの位置からすると打ちづらいし、なければ早く書けるのかも。
まだ Ruby 界隈がよく分かってないけど、省略は基本的に使うべきではないのかも。
Rubyコーディング規約
既存のクラスに関数を追加できる
JavaScript では prototype の拡張がこれに当たる。
C# で言えば拡張メソッド。
class String # 文字列が回文であればtrueを返す def palindrome? self == self.reverse end end
僕のようなアプリケーションエンジニアは使うべきではないと思う。
使うとすれば「 JavaScript でよくあるブラウザバージョンの挙動の違いを吸収したい」みたいなケース。
Railsチュートリアルでもこれを注意喚起した文章が書いてあった。
組み込みクラスの変更はきわめて強力なテクニックですが、大いなる力には大いなる責任が伴います (訳注: 「スパイダーマン」の名台詞)。従って、真に正当な理由がない限り、組み込みクラスにメソッドを追加することは無作法であると考えられています。
Railsチュートリアル - 4.4.3組込みクラスの変更
インスタンス変数にアットマークがついてる
インスタンス変数=メンバ変数。
Ruby でインスタンス変数を扱うときはアットマークが先頭につくことになる。
class User attr_accessor :name, :email def initialize(attributes = {}) @name = attributes[:name] @email = attributes[:email] end def formatted_email "#{@name} <#{@email}>" end end
これは嬉しい。
変数名で見分けが付くようにしようなどと考える手間が省ける。
最後に
新しい言語を学ぶってやっぱりワクワクする。
多くの OSS 界隈のプログラマを虜にする Ruby & Rails のことだから、まだまだ驚かされることになるんだろう。
期待しよう。
Ruby on Rails 4 アプリケーションプログラミング
- 作者: 山田祥寛
- 出版社/メーカー: 技術評論社
- 発売日: 2014/04/11
- メディア: 大型本
- この商品を含むブログを見る
- 作者: まつもとゆきひろ
- 出版社/メーカー: 日経BP社
- 発売日: 2014/01/31
- メディア: Kindle版
- この商品を含むブログを見る