さんさろ

さんさろ

プロダクトエンジニアの雑記&技術、たまにドイツ

Rubyの勉強を始めました

Ruby

年末年始で時間があるので、気になっていたRubyの勉強を始めました。

今回使う入門サイトは Progate というサイト。

ブラウザ上で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 に入って行くぞー(゚∀゚)