翻訳の、レッスン
にわ語は、この庭だけのことば
最初に打ち明けておくことがあります。ここまで使ってきたにわ語は、この庭のためだけに作られた言語で、庭の外のコンピュータは一台も読めません。世界のウェブサイトやアプリを動かしているのは、JavaScript や Python といった言語です。
では、ここまでの学びは無駄だったのか。逆です。名づけ、くりかえし、分かれ道——あなたは「言いたいこと」をすでに全部持っています。足りないのは、それを別の言語でどう言うかだけ。つまり、必要なのは翻訳です。
今日は、にわ語と JavaScript を上下に並べて、両方を実行しながら橋を渡ります。
一行目を、翻訳する
まず、いちばん短い文から。上がにわ語、下が JavaScript で、どちらも本物に実行できます。
「こんにちは」 と いう
Ctrl+Enter でも実行できます
console.log("こんにちは")Ctrl+Enter でも実行できます
同じ挨拶が出力されたはずです。対応を見てください。いう の役を console.log が、かぎかっこ 「」 の役を "" が務めています。console は「操作卓」、log は「記録」——直訳すれば「操作卓に記す」です。
語順がひっくり返っていることにも注目してください。にわ語は「こんにちは、と言う」、JavaScript は「記せ、こんにちはを」。日本語と英語の語順の違いが、そのまま持ち込まれています。
名づけを、翻訳する
レッスン2の主役だった「とよぶ」は、こうなります。
40 を かんかく とよぶ かんかく と いう
Ctrl+Enter でも実行できます
let kankaku = 40 console.log(kankaku)
Ctrl+Enter でも実行できます
let は英語で「〜とする」。let kankaku = 40 は「kankaku を 40 とする」で、意味はにわ語の名づけとぴったり同じです。ここでも語順だけが逆で、にわ語は値が先、JavaScript は名前が先に来ます。
付け替え(にする)は、2回目からは kankaku = 80 と、let を付けずに書きます。はじめての名づけにだけ let を付ける——「とよぶ」と「にする」を使い分けたのと、同じ区別です。
くりかえしの、呪文
レッスン3の「ノック」を翻訳します。ここが今日いちばんの難所なので、先に言っておきます。JavaScript のくりかえしは、見た目がかなりいかついです。
4 かい くりかえす {
「ノック」 と いう
}Ctrl+Enter でも実行できます
for (let i = 0; i < 4; i++) {
console.log("ノック")
}Ctrl+Enter でも実行できます
for (let i = 0; i < 4; i++) ——この1行には部品が3つ詰まっていて、それぞれに意味があります。でも今日は、解剖しません。「4 のところに回数を書く呪文」として、形ごと覚えてください。
呪文のままでも、ちゃんと使えます。4 を 10 に変えて実行してみてください。中身の解剖は、次のレッスンでじっくりやります。
分かれ道を、翻訳する
「もし」は if、「ちがえば」は else。これはほとんど直訳です。
80 を てんすう とよぶ
もし てんすう が 60 より おおきい ならば {
「ごうかく」 と いう
} ちがえば {
「もうすこし」 と いう
}Ctrl+Enter でも実行できます
let tensuu = 80
if (tensuu > 60) {
console.log("ごうかく")
} else {
console.log("もうすこし")
}Ctrl+Enter でも実行できます
条件の書き方だけ少し違います。「てんすう が 60 より おおきい」が tensuu > 60 に縮みました。不等号の > は、算数で使ったあの記号そのままです。
両方の 80 を 50 に変えて、両方の答えが同じように変わることを確かめてください。
対応表という、小さな辞書
ここまでの翻訳を、一枚にまとめます。
| にわ語 | JavaScript | 意味 |
|---|---|---|
〜 を なまえ とよぶ | let namae = 〜 | 名づけ |
〜 と いう | console.log(〜) | 出力する |
N かい くりかえす { } | for (let i = 0; i < N; i++) { } | くりかえし |
もし 〜 ならば { } ちがえば { } | if (〜) { } else { } | 分かれ道 |
「〜」 | "〜" | 文字列 |
※ | // | コメント(読み手への注釈) |
かく すすむ まわる が表にないことに気づいたでしょうか。素の JavaScript には、絵筆が標準でついていません(道具を借りてくれば描けますが、それはまた先の話です)。だから今日の JavaScript は、声だけで動いています。
行の終わりに ;(セミコロン)を打つ流儀も見かけるはずです。日本語の句点のようなもので、JavaScript では多くの場合、打っても省いても動きます。
方言はちがう、木はおなじ
前のレッスンで、コンピュータは文を読むとき、まず木の形に組み立て直すという話をしました。その話が、ここで効いてきます。
40 を かんかく とよぶ と let kankaku = 40 は、字面も語順もまるで違います。でも木にすると、どちらも「40 という値」と「かんかく という名前」を一本の枝で結んだ、同じ形になります。「捨てる」と「ほかす」のように、言い方が違っても起きることは同じ——英語のキーワードもセミコロンも、いわば方言です。
そして、構造が同じだから翻訳ができる。「私は犬が好き」と “I like dogs” のあいだで意味が保たれるのと、同じ理屈です。あなたが6つのレッスンで身につけたのは、にわ語の単語ではなく、この木のほうでした。だから、持ち越せます。
⟡ よりみち:JavaScriptという名前
JavaScript は1995年、ネットスケープ社のブレンダン・アイクが、最初の版をわずか10日で作った言語です。当時大人気だった Java という別の言語にあやかって、宣伝のためにこの名前が付けられました。つまり Java と JavaScript は、メロンとメロンパンくらい別のものです。10日の突貫工事で生まれた言語が、30年後に世界中のブラウザを動かしている——歴史には、こういう偶然がときどき混ざります。
つまずきどころを、先に言っておく
JavaScript には、にわ語にはなかった厳しさが2つあります。ここは多くの人がつまずく場所で、つまずくのが普通です。
1つめ、大文字と小文字を区別します。 console.log を Console.Log と書くと、別の言葉とみなされてエラーになります。コンピュータにとって A と a は、最初から別の文字です。
2つめ、全角と半角を区別します。 にわ語は全角の () や全角スペースも受け入れてくれましたが、JavaScript は半角しか読みません。日本語入力のままうっかり打った全角スペースや () は、見た目がそっくりなのに必ずエラーになります。エラーが出て心当たりがなければ、まず全角を疑ってください——これは経験者でも踏む罠です。
✎ 演習:にわ語を、JavaScriptに翻訳する
下のにわ語のプログラムを読んで(実行して確かめてもかまいません)、同じ意味の JavaScript をその下のエディタに書いてください。実行して同じ出力が出たら、翻訳成立です。
「やあ」 を あいさつ とよぶ あいさつ と いう 2 + 3 を ごうけい とよぶ ごうけい と いう
Ctrl+Enter でも実行できます
// ここに、上のにわ語の翻訳を書いてください
Ctrl+Enter でも実行できます
ヒント1(考え方)
1行ずつ訳します。文の種類は「名づけ」と「いう」の2つだけで、どちらも対応表に載っています。名前(あいさつ、ごうけい)はローマ字にするのが通例です。
ヒント2(かたち)
1行目は let aisatsu = "やあ" のかたちです。文字列のかぎかっこを "" に替えるのを忘れずに。2 + 3 のような計算は、そのまま書けます。
こたえ(の一例)
let aisatsu = "やあ" / console.log(aisatsu) / let goukei = 2 + 3 / console.log(goukei) の4行。出力は「やあ」と「5」です。
実は JavaScript は let あいさつ = "やあ" のように日本語の名前も受け入れます。名前の付け方があなたなりでも、出力が同じなら、それは正しい翻訳です。
このレッスンで分かったこと
- にわ語で身につけた概念(名づけ・くりかえし・分かれ道)は、JavaScript にそのまま持ち越せる
- 英語キーワードも記号も方言にすぎない。文の**構造(木)**は言語をまたいで同じ
- 対応の核:
とよぶ→let、いう→console.log、くりかえす→for、もし/ちがえば→if/else - JavaScript は大文字小文字と全角半角に厳密。心当たりのないエラーは、まず全角を疑う
あなたはもう、二つの言語を行き来しました。次のレッスンからは、橋の向こう側——JavaScript の側で書いていきます。