« AWSクラウドデザインパターンの感想~RDP(Redmine Design Pattarn)の構想 | トップページ | Redmineのステータスに説明機能が欲しい要望の背景 »

2020/03/06

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のような書き方でスコープゲートを回避する。
 つまり、フラットスコープ。

|

« AWSクラウドデザインパターンの感想~RDP(Redmine Design Pattarn)の構想 | トップページ | Redmineのステータスに説明機能が欲しい要望の背景 »

Ruby」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« AWSクラウドデザインパターンの感想~RDP(Redmine Design Pattarn)の構想 | トップページ | Redmineのステータスに説明機能が欲しい要望の背景 »