Ruby初心者が間違いそうなこと
Ruby初心者が間違いそうなことの記事に共感したのでメモ。
適当なラフなメモ書き。
【参考】
Ruby初心者が失敗しがち/間違えがちなこと5選 | Workship MAGAZINE(ワークシップマガジン)
1. 範囲演算子の範囲を読み違えがち
=> 範囲演算子「..」「...」は異なる。点一つで意味は全く違う。
2. 引数にProcをそのまま渡しがち
=> Procをブロック引数として渡すために、&演算子を使う。
さらに、シンボルで渡す方が簡略化できる。
injectが良い例。
&演算子を使う部分はPerlに似ている。
3. Array#mapのブロック引数で、途中結果を返却するためにreturnを書きがち
=> mapやselectなど、ブロック引数を受けとるタイプのメソッドを使用する際、「ブロックの途中で得られた値」を「そのブロックで得られた最終結果」として返却したい場合では、「return」ではなく「next」を使う。
結構間違える。
4. 正規表現のマッチ結果を思うように取得できない
=> ()でグループ化した正規表現に対し、組込変数$1,$2...に、マッチング結果が格納される。
Perlと同じ。Javaとは異なる。Javaの方が面倒。
5. privateなクラスメソッドを定義しようとしてpublicにしがち
=>
privateの考え方はJavaやC#と全く異なるので、最初は混同してた。
JavaやC#の常識が通用しないRubyのprivateメソッド - give IT a try
[Ruby] privateメソッドの本質とそれを理解するメリット - Qiita
Javaならば、親クラスのprivateメソッドは子クラスでは呼び出せない。
しかし、Rubyでは「privateメソッドはサブクラスからも呼び出せる」考え方が最初は分かってなかった。
「privateメソッドは呼び出す際にレシーバを指定できない」「子クラスでは、親クラスのメソッドをレシーバ無しで呼び出せる」ことを組み合わせれば良い、という記事を読んでようやく理解できた。
6. スコープゲートが厳しい
=> Rubyのスコープゲートは厳しい。
Rubyは、class、module、defのスコープゲートは乗り越えられない。
ローカル変数をスコープ内側へ - 【旧】PerlerのRuby日記->はてなブログに移行しました
Perlは、myを付けなければ、ローカル変数はメソッド内でも使える。
Javaならば、クラス内ではprivateな変数はどのメソッドでも使える。
この点をよく間違えていた。
一方、Rubyでは、ブロックならスコープゲートを越えられる。
たとえば、define_method do~end、Class.new do~endのような書き方でスコープゲートを回避する。
つまり、フラットスコープ。
| 固定リンク
「Ruby」カテゴリの記事
- 「コーディングを支える技術」は良い本だ(2022.05.26)
- 知識は経験よりも大切か、経験は知識よりも勝るのか、SECIモデルは相互作用を語る(2022.04.26)
- 「RubyやRailsは終わった」という記事のリンク(2022.01.09)
- ITの技術や知識はツールの習得と表裏一体である(2021.03.26)
- JRubyの終焉(2020.06.09)
コメント