crossroads[16]C言語な自分がRubyを始めた話/若林健一

投稿:  著者:  読了時間:5分(本文:約2,100文字)



こんにちは、若林です。この週末で九州から関東甲信までが梅雨入りし、雨の季節がやってきました。

私、雨は好きな方で、といっても程度の問題であまり長すぎるのは困りますが、雨音を聴いていると集中力が高まり心が落ち着くので、適度な雨、特に週末の雨は割と好きです。

●本格的にRuby始めました

このたび「Ruby」というプログラミング言語の勉強を始めました。

プログラミング言語というと、海外の企業やエンジニアが開発したものが多い中で「Ruby」は「まつもとゆきひろ」さんという日本人が開発した言語です。

まつもとゆきひろ - Wikipedia
http://bit.ly/1Xw71IL

2月に一度、友人を講師に「Ruby」の勉強会を開催してから、少しずつ使い始めてはいたのですが、順序だてて勉強するのではなく、必要に応じて情報を探して作るという方法だったため、一度やったことも忘れてしまうことが多く、「このままではいつまで経っても身につかない!」と考えて入門書を購入。

仕事ではJavaやC++なども扱いましたが、C言語を使っていた期間が長かったこともあり、最近のモダンなプログラミング言語にはなじみが薄い自分は、今更ながらCとRubyのギャップに感激しています。




●多重代入

カルチャーショックというか、一番驚いたのは「多重代入」という言語仕様。従来の言語の場合、変数に値を入れる「代入処理」というのは、

a = 1;
b = 2;
c = 3;

のように、1行でひとつの処理を書くのが普通です。
これがRubyだと、

a, b, c = 1, 2, 3

と1行で書けてしまいます。
さらにすごいことに、2つの変数の入れ替え処理を

a, b = 1, 2
a,b = b, a

だけで書けてしまうのです。

これは1行目でaに1、bに2を代入し、2行目でそれらを入れ替えているのですが、普通なら、

tmp = a;
a = b;
b = tmp;

のように、ひとつ別の変数を用意し、移し替えておく必要がありました。

実際の世界に置き換えて考えれば、ふたつの容器の中身を入れ替える時、いずれか一方の中身を移しておく別の容器を用意するものですね。

したがって、従来の言語仕様の方が理解はしやすいと思いますが、多重代入を使えばソート処理(データを一定の基準で並べ替える処理)のようなコードは、かなりシンプルに書けるようになるというメリットがあります。

●動的型付け

これはRubyに限った仕様ではなく、PythonやJavaScriptでも同じなのですが、C、C++、Javaのような「静的型付け」に慣れた人間だと、とまどうことも多い仕様です。

「型」とは、その変数が文字なのか数字なのか、数字の場合整数なのか小数を含むのかといった情報で、これを変数の宣言時に決めるものが「静的型付け」、実行時の値によって決まるものを「動的型付け」と言います。

それぞれメリットデメリットがあり、「静的型付け」であればバグで変数の取り扱いに間違いがあったとしてもエラーとして発見しやすく、「動的型付け」であれば設計変更などにより、扱うデータの型が変わってもコードの変更がほぼ必要ないといったメリットがあります。

Cでプログラミングしていた時に、例えばlong型変数の演算結果を間違ってint型に代入してしまい、int型のサイズを超える演算結果が失われていた(もちろん、コンパイル時点で発見することが可能なのですが)といったことを一度は経験されていると思いますが、動的型付けだとそういった失敗が起こりにくくなります。

その一方で、様々な結果を想定した単体テストを書く必要があるので、テストコードの量が増えるというデメリットがあるようです。

自分はまだそこまで大規模なコードを書いているわけではないので、今のところ書きやすさのメリットを感じていますが、参照時の型指定を忘れてエラーを起こすこともあります。

●文法の違い

Cプログラマーが陥りやすいのが「うっかり行末にセミコロンをつけていた」というミス。

CやCの言語仕様を踏襲している多くの言語では、行の終わりにセミコロン(;)をつける仕様となっているため、これに慣れたプログラマーはつい最後にセミコロン(;)を書いてしまい、実行時にエラーを起こしてしまいます。

分岐処理や繰り返し処理の制御構文の違いも、慣れるのには時間がかかりそうです。

繰り返し処理については、Cだと自前で実装もしくはライブラリにたよっていたような機能が言語仕様レベルで実現されているものもあり、本当に便利な世の中になったなと、新しい家電機器に感動するおじいちゃんのような気持ちで学んでいます。

●冒険の旅に出よう

新しい技術を習得する時の感覚って、RPGで新しい武器を手に入れたり呪文を覚えた時の感覚に似ています、便利な機能や強力な機能は使ってみたくてしょうがない。

いつまでもそんな新鮮な気分を味わえるのは、エンジニアの特権ですね、せっかく手に入れた新しい武器を使いこなせるようになるように、色んなモンスターと戦う旅に出てみたいと思います。


【若林健一 / kwaka1208】
http://kwaka1208.net/
https://twitter.com/kwaka1208

CoderDojo奈良&生駒の開催予定
http://coderdojo-nara.org/
奈良:6月11日(土)午後
生駒:7月30日(土)午後