■ ファースト・インパクト
オブジェクト指向スクリプト言語Rubyの紹介記事を読んでいて最も衝撃だったのは、
A, B = B, A
の1行で、変数Aと変数Bの中身をスワップできることを知ったときだった。
これ、プログラミング言語について何も知らない人には何が衝撃なのかわからないかもしれないけれど、ちょっとでもプログラミングをカジッたことのある人にとっては驚きではないだろうか。
確かにこう書ければいいのになとは常々思っていたさ。思ってはいたけど、それはコンピュータの世界では許されないことなんだと思い込んでいた。そんな感じだ。
プログラミング言語の世界で使われる「=」は多くの場合「イコール」ではなくて、「代入」を表すことが多い。例えば、
A = 5
によって、Aという変数に5という数値を代入する。別の言い方をすれば、Aという変数の値が5になる。同様に、
B = 10
これで、Bの値は10になる。で、今、両者をスワップしたい。つまり、Aの値を10にして、Bの値を5にしたい。こういうときに、全くの初心者はしばしば
A = B
B = A
とやるが、こうやってもダメである。
「A = B」の段階で、AもBも10になっているから、「B = A」とやってもBに10を代入しているだけ。つまり、AもBも10になってしまう。
そこで、両者の値を入れ替えたいときには、第三国を経由する必要がある。
C = A まず、Aの値をCに代入しておいて
A = B Bの値をAに代入し
B = C Cに代入しておいた(かつての)Aの値をBに代入する
こういう手順を踏まなければならない。面倒だけど、考えてみればこれはこれで当然の話だし、すぐに慣れる。慣れるけど、本当のことを言えば、直感的じゃないよな、とずっと思っている。それが、
A, B = B, A
でいいって言うんだもん。えーっっ、そんなのアリ?と衝撃を受けるわけだ。こっちの方が直感的でしょ? 自然でしょ?と言われればまさにその通りなんだけど、「プログラミングにおいて、直感的で自然なコードが書ける」ということそのものが僕にとっては衝撃なのだ。
■ セカンド・インパクト
最近、韓国語の勉強をしていて、勉強すればするほど、韓国語が日本語に似ていることに衝撃を受けている。
例えば、日本語の「と」に対応する「하고」という助詞がある。「リンゴとミカン」は「リンゴ하고ミカン」のように置き換えてやればいい。なるほど、「and」みたいなものだな?と思うでしょう? (ここで、「なるほど、『と』と同じだな?」と思わないところがポイント。)
驚くべきは、「友達と旅行に行く」のような場合にも「友達하고旅行に行く」と置き換えてやればいい、ということだ。えっっ? 「AとB」の「と」と「Aと〜する」の「と」は文章構造における意味合いが違うでしょ?と思う。英語だったら「〜する with A」みたいになるだろうし…。
驚きを通り越して衝撃だったのは、「彼女は学生です」の「は」に対応する助詞は「는」で「彼女는学生です」というような使い方をするのだけど、「彼女とはただの友達です」みたいなときに、「彼女하고는ただの友達です」と言うのだ。信じられますか。僕は正直、シンジラレナ〜イ。(僕はまだ、日本語と韓国語が言語学的に全く別の言語として分類されていることに疑いを抱いている。)
僕が驚いていると、선생님は「日本語と同じでしょう?(何を驚いているの?)」と言うのだけど、「日本語と同じである」ということそのものが僕にとっては驚きだ。
多少でも英語でEメールを書く必要性に迫られた経験があったりすると、外国語というものは、日本語の単語をそのまま「対応する単語」で置き換えていっただけでは意味の通じる文章にはならない、という感覚が染み付いていると思う。まず、日本語で考えた自分の言いたいことの意味を、具体的な日本語表現に依存しないかたちで捉え直して、その意味そのものを、特定の言語の文法や表現上のルールに則って表現する、という手順を踏まなければならない。それは面倒だけど、外国語というものは日本語じゃないんだから仕方がない。外国語とはそういうものだ。と思い込んでいた。
それが、日本語と同じでいいって言うんだもん。えーっっ、そんなのアリ?と衝撃を受けるわけだ。「日本語と同じ」ということ自体が僕にとっては衝撃なのだ。