Rubyの勉強を始めました
Ruby
年末年始で時間があるので、気になっていたRubyの勉強を始めました。
今回使う入門サイトは Progate というサイト。
- Progate | プログラミングの入門なら基礎から学べるProgate[プロゲート]
- 途中から有料です。月額980円(税込)
ブラウザ上でRubyを実行した結果が確認出来るのがいいですね。あとサイトの雰囲気やキャラクターが可愛いし、学習者のレベルで表示されたり、レベルアップした時にポップアップが出てSNSで簡単に共有出来るようになってたりと、学習者が飽きないような工夫が色々あって好感が持てます。
しかし「Ruby」のレッスンに関して言えば、プログラミングの初学者向けの内容ですので、当然基本的な部分(文字列と数値は別物ですので区別しましょうとか、if文の中では字下げしましょうとか)もきっちりやります。最初は少し退屈な部分もありそうだな、と思いつつ…。
でも「Ruby on Rails5」というレッスンもあるので、1月3日までにこれ修了出来るといいな。アプリ作りたいよアプリ。
この記事では、学習する中でPHPとの違いとか、へぇ〜と思った箇所を、自分のメモ代わりに書き出してみます。
Rubyの基礎
- 文末は何もない。; (セミコロン)で終わらないので少し違和感
- 文字連結は +(加算記号)。JSみたい
- 数値と文字列は +(加算記号)で連結出来ない
- 命名規則:変数はスネークケースで書く
- 頭に何も付けなくても変数として使える。JSみたい
- 変数展開出来るのは "(ダブルクオート)の中のみ
- Rubyにはインクリメント演算子が無いらしい
- 型変換は明示的にしてあげる必要がある
- PHPで言う null は、Rubyでは nil
条件分岐
- if にカッコが無い……違和感
- else if のスペルが…!? elsif だって……
配列とハッシュ
- 配列は fruits = ["apple", "orange"]
- 配列の使い方は概ね同じ感覚でいけそう
- と思ったら違った。PHPで言う連想配列は、Rubyでは配列ではなくハッシュというらしい。そもそも配列とは別物として扱うようだ…。定義する際の記号も { } を使う。
user = {"name" => "suzuki", "age" => 20 }
- でも使う際には配列のように user["name"] と、[ ] こっちのカッコを使うらしい。紛らわしい。
- シンボル(:name)という新しい概念:文字列≒シンボル
- ハッシュのキーをシンボルで置き換えられる。その場合、呼び出す時もシンボルで記述する必要がある
- そうすると、ハッシュを
user = { name: "suzuki", age: 20 }
という省略した書き方が出来る。なるほど、確かに見やすい。呼び出す時は user[:name] でコロンを前につけて呼び出す。 - 配列の中にハッシュを入れられる……?JSONじゃん……?てかもうハッシュも含めて全部「配列」で良くないですか。要は多次元配列じゃないですか……とか思ってはいけないのですよねすみません。
- foreachの書き方が全然違う…
languages.each do |language|
puts "#{language}を話せます"
end
メソッド
- メソッド定義は function ではなくて、def
- 引数がない場合にはメソッドを呼び出す際でも (カッコ) を省略出来る
- メソッド名もスネークケースが一般的なのかな??
- メソッドから返る値は「戻り値」と言う
- bool値を返すメソッド名末尾、カッコの前に?(クエスチョンマーク)を付ける慣習があるそうな。へえ〜。
def negative?(number)
return number < 0
end - キーワード引数という新しい概念:引数を指定する際に
def introduce(name:, age:)
...
endというふうにコロンを後ろに付けて指定する。そうすると、メソッドを呼び出す時に
introduce(name: "suzuki", age: 20)
値の前にキーワードを付けて呼び出せる。引数が多くなった時にわかりやすくていいよねってことらしい。確かに分かりやすい。PHPStormの自動表示機能みたいだな。
クラス
- インスタンスの生成には クラス名.new を使う
menu1 = Menu.new
- インスタンスメソッドなどの考え方はPHPと同じ。呼び出し方は
menu1.name
みたいに .(ドット)でつなぐ - PHPで言うところのコンストラクタは、Rubyでは initializeメソッド と言う
- クラスの継承は
class Food < Memu
と書く。なんか新鮮。 - オーバーライドの概念はPHPと同じようだ
- super()が一瞬「ん?」ってなったけど……。要は単純にオーバーライドする元メソッドを呼び出してるだけですね。
- クラスメソッド(=静的メソッド)を生成する場合
class Menu
...
def Menu.is_discount_day?
today = Date.today
return today.sunday?
end
end
Ruby標準ライブラリの Dateメソッド
- 私の誕生日は日曜日ではなかったらしい
- 段々スキット内のネコの返しが雑になって来てる笑
「Ruby」レッスンは修了
基礎修了までざっと3時間ちょいでした。こんなもんですかね…?
まあオブジェクト指向なのは変わんないから、手段が変わっただけってことですね。基本を理解してれば難しくありません。Rubyの書き方を覚えなければという所ですが、アプリ作ってればその内慣れるでしょう、って範囲を出ない気がします。良かった。
キーワード引数とシンボルは絶対何度も間違えるでしょうけど。
あとはRubyのメソッドとか覚えなければですが、今日はここまで。
今度は、ついに!
Ruby on Rails に入って行くぞー(゚∀゚)