l 演算⼦は、複合代⼊⼦やビット演算 ⼦も含めて、だいたい同じ l ⽂字列は可変 l コードをコンパイルする必要がない l オブジェクトは強く型付けされてい る l マクロやプリプロセッサ、キャスト もポインタもないです l ヘッダファイルはない l メソッド(関数)の引数は(ほとんど)参 照渡しされる l ⾏の終わりにセミコロンは不要 l 「ブロック」は C にあるブロックと は別もの l メソッド呼び出しに関連付ける コード⽚を意味する l 変数は必要になったら、新しい変数 名に紐付けるだけ l false と nil だけが偽 l ⽂字列の終端は null ⽂字ではない C と Ruby 似てる点 異なる点 Ruby は C で実装されていることもあり、共⽣することができます。
⼦も含めて、だいたい同じ l メンバ呼び出しもある l -> ではなく . (ドット) l 継承可能 l : (コロン) ではなく < (⼩なり) l namespace 的なこともできる l 実際は module 化 l 例外を扱うための作法は⼀緒 l 明⽰的に参照を扱うことはない l オブジェクトは強い型付けがされる が、動的に⾏われる l 最後が ? や ! で終わるメソッドがある が、これはメソッド名の⼀部 l コンテナクラスは Array と Hash の2 種類だけ l 型変換はない C++ と Ruby 似てる点 異なる点 C++ はオブジェクト指向でも記述できることもあり、書き⽅が異なるが考え⽅が 共通する部分が多いです。
l 変数も宣⾔しなくても使⽤できる l クラスがある l eval がある l 式展開が使⽤できる l ヒアドキュメントがある l 例外機構がある l PHP 5.x 以下の⼈はすみません l かなり膨⼤な標準ライブラリがある l 強い型付けがある l ⽂字列、数、配列、ハッシュなども オブジェクトである l リフレクション機能はオブジェクト ごとに備わっている l 変数は参照である l 抽象クラスが存在しない l false と nil のみが偽になる PHP と Ruby 似てる点 異なる点 PHP は Web アプリケーションを作る道具として普及しているが、Ruby もその 選択肢の⼀つとなりつつあります。
Ruby on Rails と呼ばれる Web フレームワークが⽕付け役となり、 Web アプリケーションを始め、CUI ツール作成⾔語としても⼈気があります。 向いていると⾔われている⽤途・便利な点 l テキスト処理 – Perl と同等レベルの強⼒な正規表現 l メタプログラミング – お⼿軽にメタプログラミングが可能であり、⾮常に協⼒ l 並列実⾏ – 簡単にスレッド、プロセスレベルに分けて実⾏できる – Ruby が CPU やメモリを結構⾷うため、やり過ぎ注意 l ⽤意なコーディング – 直感的なコーディングが可能 – 必要なメソッドは⼤体⽤意されている
条件分岐 後置の if l Perl や CoffeeScript にも存在する「後置の if 」を使⽤することができる 値を返す l Scala のように式としても扱える height = 130 put "ちっちゃい" if height < 160 height = 130 str = if height > 160 "普通" else "ちっちゃい" end str # => ちっちゃい
C / C++ Ruby 繰り返し int numbers[] = {1, 2, 3, 5}; int number_length = sizeof(numbers) / sizeof(numbers[0]); for (int i = 0; i < number_length; ++i) { printf("%d¥n", numbers[i]); } <?php foreach (array(1, 2 ,3 , 5) as $num) { print($num . "¥n"); } for num in [1, 2, 3, 5] puts num end # こっちの方をよく使う [1, 2, 3, 5].each do |num| puts num end
す。 クラスは多重継承ができませんが、 Mix-in を使⽤することでその弱さを補うこと ができます。(※ 後述します) class CapitalValue < String def initialize(str) super(str.upcase) end end value = CapitalValue.new('test') value # => TEST 継承を⾏った場合、同⼀名のメソッドはオーバーライドされます。 super は継承元の同じ名のメソッドを呼び出す命令です。
のコードを⾒ていると、上記のようなコードが出てきます。 これは特異クラスと呼びます。 今はクラスメソッドを作成するためのイディオムであると思っていただいて構い ません。 class User class << self def male(first_name, last_name) new(first_name, last_name, 1) end end end
User attr_reader :gender def initialize(first_name, last_name, gender) @first_name = first_name @last_name = last_name @gender = gender end end インスタンス変数にアクセスするためのメソッドを⽣やすクラスメソッドです。 attr_reader 以外にも以下のようなものが存在します。 l attr_writer l attr_accessor class User def gender @gender end def gender=(value) @gender = value end end
のモジュールは namespace を作成する役割と、Mix-in による実装継承を ⾏うための役割の 2 つを兼任しています。 Mix-in namespace module Admin class User def whois 'admin' end end end module General class User def whois 'general' end end end Admin::User.new.whois # => admin General::User.new.whois # => general module Speaking def hungry 'I¥'m hungry.' end end module Sports def play 'soccer' end end class User include Speaking include Sports end user = User.new user.hungry # => I'm hungry. user.play # => soccer
Web アプリケーション This is Why Learning Rails is Hard には Rails を習得するために必要な技術要素 ⼀覧が載っています。(Web アプリケーションを習得するために必要な技術要 素であると⾔い換えてもよいと思います) l Ruby language l Rubygems l Rails framework l Git l IDE / Editor l Software engineering l SQL & data modeling l Tests l Deploy l www
app = proc do |env| [200, {'Content-Type' => 'text/plain'}, [ 'This is a web app.' ]] end run app config.ru というファイル名で以下のファイルを⽤意してみましょう。 rackup コマンドを叩いて、ブラウザで localhost:9292 を叩いてみましょう。
l Ruby の⽂法をみてきました l Ruby には rack という Web サーバーが gem として配布さていました – rack は様々なフレームワークの元になっていることが多い l Sinatra を使⽤して保存がして表⽰するようになりました 今後(Ruby)勉強するに当たっての Tips l 作りたいもの(こと)を探して作り始めてみる l RubyMine などでソースコードを追っかける l Ruby Magazine を読んでみる l 分からなかったらどんどん質問する