翻訳の、レッスン

よみもの+手を動かす時間:およそ30分

にわ語は、この庭だけのことば

最初に打ち明けておくことがあります。ここまで使ってきたにわ語は、この庭のためだけに作られた言語で、庭の外のコンピュータは一台も読めません。世界のウェブサイトやアプリを動かしているのは、JavaScript や Python といった言語です。

では、ここまでの学びは無駄だったのか。逆です。名づけ、くりかえし、分かれ道——あなたは「言いたいこと」をすでに全部持っています。足りないのは、それを別の言語でどう言うかだけ。つまり、必要なのは翻訳です。

今日は、にわ語と JavaScript を上下に並べて、両方を実行しながら橋を渡ります。

一行目を、翻訳する

まず、いちばん短い文から。上がにわ語、下が JavaScript で、どちらも本物に実行できます

にわ語
「こんにちは」 と いう

Ctrl+Enter でも実行できます

JavaScript
console.log("こんにちは")

Ctrl+Enter でも実行できます

同じ挨拶が出力されたはずです。対応を見てください。いう の役を console.log が、かぎかっこ 「」 の役を "" が務めています。console は「操作卓」、log は「記録」——直訳すれば「操作卓に記す」です。

語順がひっくり返っていることにも注目してください。にわ語は「こんにちは、と言う」、JavaScript は「記せ、こんにちはを」。日本語と英語の語順の違いが、そのまま持ち込まれています。

名づけを、翻訳する

レッスン2の主役だった「とよぶ」は、こうなります。

にわ語
40 を かんかく とよぶ
かんかく と いう

Ctrl+Enter でも実行できます

JavaScript
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 でも実行できます

JavaScript
for (let i = 0; i < 4; i++) {
  console.log("ノック")
}

Ctrl+Enter でも実行できます

for (let i = 0; i < 4; i++) ——この1行には部品が3つ詰まっていて、それぞれに意味があります。でも今日は、解剖しません。「4 のところに回数を書く呪文」として、形ごと覚えてください。

呪文のままでも、ちゃんと使えます。410 に変えて実行してみてください。中身の解剖は、次のレッスンでじっくりやります。

分かれ道を、翻訳する

「もし」は if、「ちがえば」は else。これはほとんど直訳です。

にわ語
80 を てんすう とよぶ
もし てんすう が 60 より おおきい ならば {
  「ごうかく」 と いう
} ちがえば {
  「もうすこし」 と いう
}

Ctrl+Enter でも実行できます

JavaScript
let tensuu = 80
if (tensuu > 60) {
  console.log("ごうかく")
} else {
  console.log("もうすこし")
}

Ctrl+Enter でも実行できます

条件の書き方だけ少し違います。「てんすう が 60 より おおきい」が tensuu > 60 に縮みました。不等号の > は、算数で使ったあの記号そのままです。

両方の 8050 に変えて、両方の答えが同じように変わることを確かめてください。

対応表という、小さな辞書

ここまでの翻訳を、一枚にまとめます。

にわ語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.logConsole.Log と書くと、別の言葉とみなされてエラーになります。コンピュータにとって Aa は、最初から別の文字です。

2つめ、全角と半角を区別します。 にわ語は全角の () や全角スペースも受け入れてくれましたが、JavaScript は半角しか読みません。日本語入力のままうっかり打った全角スペースや () は、見た目がそっくりなのに必ずエラーになります。エラーが出て心当たりがなければ、まず全角を疑ってください——これは経験者でも踏む罠です。

演習:にわ語を、JavaScriptに翻訳する

下のにわ語のプログラムを読んで(実行して確かめてもかまいません)、同じ意味の JavaScript をその下のエディタに書いてください。実行して同じ出力が出たら、翻訳成立です。

にわ語
「やあ」 を あいさつ とよぶ
あいさつ と いう
2 + 3 を ごうけい とよぶ
ごうけい と いう

Ctrl+Enter でも実行できます

JavaScript
// ここに、上のにわ語の翻訳を書いてください

Ctrl+Enter でも実行できます

ヒント1(考え方)

1行ずつ訳します。文の種類は「名づけ」と「いう」の2つだけで、どちらも対応表に載っています。名前(あいさつ、ごうけい)はローマ字にするのが通例です。

ヒント2(かたち)

1行目は let aisatsu = "やあ" のかたちです。文字列のかぎかっこを "" に替えるのを忘れずに。2 + 3 のような計算は、そのまま書けます。

こたえ(の一例)

let aisatsu = "やあ"console.log(aisatsu)let goukei = 2 + 3console.log(goukei) の4行。出力は「やあ」と「5」です。

実は JavaScript は let あいさつ = "やあ" のように日本語の名前も受け入れます。名前の付け方があなたなりでも、出力が同じなら、それは正しい翻訳です。

このレッスンで分かったこと

  • にわ語で身につけた概念(名づけ・くりかえし・分かれ道)は、JavaScript にそのまま持ち越せる
  • 英語キーワードも記号も方言にすぎない。文の**構造(木)**は言語をまたいで同じ
  • 対応の核:とよぶletいうconsole.logくりかえすforもし/ちがえばif/else
  • JavaScript は大文字小文字と全角半角に厳密。心当たりのないエラーは、まず全角を疑う

あなたはもう、二つの言語を行き来しました。次のレッスンからは、橋の向こう側——JavaScript の側で書いていきます。