多重代入と、命名規則
今日のRubyです。
多重代入によるスワップ
C, C++ Java等しか経験がないプログラマーには、見慣れない代入方法があります。その名も多重代入。これを使うと、一時変数を使わずにスワップができるというお話でございます。以下は、多重代入を用いて2つの変数[x, y]を[0, 1]で初期化し、慣例通りのスワップを行う処理。
# このように、代入をまとめて行うことができる。 x, y = 0, 1 # よく見るスワップ tmp = x x = y y = tmp p [x, y]
出力結果
[1, 0]
当たり前ですが、スワップされましたね。xを0で初期化し、yを1で初期化し、xの値をtmpに代入しておいて、xにyの値を代入し、yにtmpの値を代入することにより、xとyの値が入れ替わる、といった処理です。
このスワップ処理は、多重代入を応用することにより以下のように書くことができます。
# このように、代入をまとめて行うことができる。 x, y = 0, 1 # 多重代入でスワップ x, y = y, x p [x, y]
出力結果
[1, 0],
この多重代入がスマートなのか、後々に混沌を生むのかは、今の私には分かりません。しかし、Rubyは多分、レベル差のある人間でペアプログラミングするのは難しい言語であるような気がしています。
慣習的な変数名の付け方
私は、「美しいプログラミングを行うために意識すべき要件を1つだけ挙げろ」と言われたら、「命名に妥協しないこと」と必ず答えます。この私的哲学は、いつかブログにまとめたいです。まあ、散々皆さん言われていることですがね。
で、Rubyの慣習的な命名規則について、教本に書かれていたのでメモしておきます。
いくつかの単語をつなぎ合わせるときには、「_」で区切ったり、単語の先頭を大文字で始める。
これは要するに「sort_list_by_name」という名前か、「sortListByName」という名前か、ということです。
Rubyでは、変数名やメソッド名には前者、クラス名やモジュール名には後者の名前のつけ方をする場合がほとんどです。
つまり、変数名やメソッド名はスネークケース、クラス名やモジュール名はローワーキャメルケースを用いるということですね。私、スネークケースが個人的に大嫌いなのですが、Rubyの生みの親である、まつもとゆきひろ氏監修の教本に、こう書いてあるのだから、従おうと思います。
忙しい中でも1日1Ruby。息抜きになって楽しいです。ではでは。