LoginSignup
0
0

More than 3 years have passed since last update.

Web系開発周りの自分用まとめ:学習:Ruby

Last updated at Posted at 2020-01-15

0. 概要

Progateを使ってRubyを学んでみての感想をまとめてみた。
他言語と比較しての感想とかも混ざってる。
今後Rubyを書いてみて、あれ?これどうするんだっけ?といったときに見返す用。

1. 感想

  • 演算子
    • インクリメント演算子++が使えない
  • 条件式
    • elseifじゃなくてelsifなのにびっくり
  • 括弧
    • くくらない言語なのでちょっと違和感(VBAとかもだけど)
    • 加えて、多言語での中括弧終わりに相当するのがend
  • 文字列内""くくりでの変数展開が#{}なのが他でみたことない感じ
    • 文字列と数値の+での結合ができない言語なので上をつかわないとダメ
  • each doに違和感
  • 慣習(と思われるもの「)
    • 変数名はスネークケース
    • 配列は複数形、each doでのループ回す時のループ変数は単数形
    • タブ(インデント)は半角スペース2つ
    • bool値を返すメソッド名の末尾は?をつける
    • クラス名は大文字開始(というか言語仕様的に大文字以外できない)
    • メソッドはキーワード引数で定義して、呼び出し側の可読性を向上させるっぽい
  • ハッシュ(連想配列)
    • 文字列と同じような(とはいえ異なる)シンボル(:<任意の文字列>)というものをキーにすることもできるがよくわからん・・・
    • シンボルはハッシュのキーとしてよく使い、通常は{"key1" => value1, "key2" => value2}と書かないといけないのを、省略して{key1: value1, key2: value2}と書くことができて楽。これは便利!
  • nil
    • オブジェクトが存在しない、はRubyではnullではなくnil
    • 条件式でnilはfalseと扱われ、それ以外の値はtrueと扱われる仕様。へぇー
  • メソッド
    • 定義するときには、defを頭につける。なんかCのマクロと混同しちゃう。
    • 定義時に引数の名前をref:のように:で終わらせると、呼び出し側でその引数をつけて呼び出させることができる。キーワード引数と呼ぶ。呼び出し側のコードの可読性があがりそう!
    • ちなみにメソッド内でのキーワード引数へのアクセスは:が取れてるバージョン。へぇ・・・
    • 引数なしの場合は呼び出し時に()は不要。つけてもうごくけど
  • クラス
    • クラス名
      • 大文字縛り。コーディング規約的に一般的なのでいいね。
    • メンバ
      • インスタンス変数と呼ぶ.変な感じ
      • attr_accessor :member1のようにシンボル的な書き方をする.変な感じ。attr_accessorもなんか長ったらしー
      • インスタンス変数へのアクセスは.member1のようにする。えぇ・・・:member1じゃないんかーい
      • ※attr_accessor :member1はメンバ変数の宣言ではないらしい。こう書くと、@member1というインスタンス変数への以下のpublicなgetter, setterが定義される特殊な書き方らしい。だから、インスタンス化した後に.member1で外部からアクセスすると、C#やJavaのような言語でpublicなmember1というインスタンス変数へ直接アクセスするかのような使い方ができる、というものらしい。
        • def member1
        • def member1=(引数)
    • メソッド
      • メンバでattr_accessorだったからattr_methodとか必要なのかと思いきや、ふつーにdef <メソッド名>ええ・・一貫性がなーい
      • クラスに定義したメソッドはインスタンスメソッドという。なんでなんや・・・クラスメソッドでいいじゃん。メンバの方もインスタンス変数だったけどクラス変数でいいじゃん・・・
        • と思いきや!クラスにはインスタンス化した後に呼び出せるメソッドとインスタンス化前に呼び出せるメソッドがあり、まだインスタンス化していないときに使えるメソッドのことをクラスメソッドと呼ぶ!なるほど!
      • 自身のインスタンス変数を使うときにはself.<インスタンス変数名>なんでthis.<インスタンス変数名>じゃないんや・・・
        • 厳密
      • コンストラクタはinitialize()。クラス自身の名前じゃないんですねぇ・・・・
    • 継承
      • 子クラス < 親クラス で定義する.:じゃなくて<なんですね。へぇー
      • 子クラスのメソッドの中でsuper()とすると親クラスの同名のメソッドを呼び出すことができる。子クラス側で親クラスと同じ処理になる場合は、こうしておくと処理の修正をしなければならないときに親クラス側を修正するだけで済みそう
  • コンソールからの入力
    • gets.chompでやる。へぇー
    • gets.chompでうけとった値は絶対に文字列。なので、文字列以外の値として扱いたい場合は、メソッドを実行する。たとえばget.chomp.to_iみたいな。なるほどねー
  • 日付を使いたい
    • Rutyで用意されているDateクラスを使う
    • require "date"が必要。require "./date"ではダメ。へぇー
    • コンストラクタは(年, 月, 日)になっている。
    • Date.new()でなく、Date.todayとすると今日の日付でインスタンス化される。へぇー
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0