JavaScriptで、書いてみる
新しいのは、表記だけ
ここまでの7つのレッスンで、あなたは名づけ、くりかえし、もしも、関数という道具を手に入れました。今日はそれを、JavaScriptという言語で書き直します。世界中のウェブページの裏側で動いている、いま地球でいちばん使われているプログラミング言語です。
先に約束しておきます。このレッスンに、新しい概念はほぼ出てきません。 変わるのは書き方だけ——漢字で書いていた手紙をローマ字で書き直すようなもので、伝える中身はもう全部あなたの中にあります。
| にわ語 | JavaScript |
|---|---|
〜 と いう | console.log(〜) |
40 を かんかく とよぶ | const kankaku = 40; |
なまえ を 〜 にする(付け替え) | let で名づけて = で付け替え |
4 かい くりかえす { } | for (let i = 0; i < 4; i++) { } |
ひとつだけ、先に正直に言っておくことがあります。この章の道具には、絵を描くキャンバスがありません。文字だけの世界です——でも文字だけでも、レッスンの最後に山を描きます。
console.log は「と いう」
まず、いちばん基本の一往復から。下を実行してみてください。
console.log("ことばの庭");
console.log("こと" + "ば");Ctrl+Enter でも実行できます
console.log(〜) は、にわ語の 〜 と いう です。console は「操作卓」、log は「記録する」——操作卓に書き出す、という意味の英語です。
読み方の部品はこうです。文字列(ことば)は " で囲んで「ここからここまでが中身です」と示し、+ で文字列をつなぐ——これはにわ語と同じです。行末の ; は、日本語の句点「。」にあたる「文の終わり」の印です。
とよぶ は const、にする は let
レッスン2の「とよぶ」と「にする」の区別を、覚えていますか。あの区別が、ここでそのまま効いてきます。
const kankaku = 40; console.log(kankaku); console.log(kankaku + kankaku);
Ctrl+Enter でも実行できます
const kankaku = 40; は「40 を かんかく とよぶ」です。const は constant(変わらないもの)の略で、付け替えない名前を宣言します。名前はローマ字で書いていますが、実は日本語の名前も動きます——ただ世界のコードのほとんどがローマ字なので、この庭もそれにならいます。
では、付け替えたいときは。let を使います。
let nagasa = 10; console.log(nagasa); nagasa = nagasa + 15; console.log(nagasa);
Ctrl+Enter でも実行できます
3行目の nagasa = nagasa + 15; は、レッスン2でやった「ながさ を ながさ + 15 にする」、あのあだ名の引っ越しです。はじめての名づけには let か const、付け替えには = だけ。
ここで実験をひとつ——上のエディタの let を const に変えて、実行してみてください。コンピュータは「constant(変わらないもの)に付け替えようとしましたね」という趣旨の英語で、誠実に断ってきます。レッスン1で学んだとおり、これは失敗ではなく返事です。
⟡ よりみち:セミコロンは要るのか論争
実はJavaScriptは、行末の ; を省略しても多くの場合は動きます。書き忘れを言語が察して補ってくれる仕組み(自動セミコロン挿入)があるからです。すると「全部省略する派」と「必ず書く派」が生まれ、何十年も論争が続いています。察しない読み手のための言語に、察する仕組みが混ざった結果の論争——この庭では「文の終わりは自分で示す」を選んで、書くことにします。
「4 かい くりかえす」を、解剖する
次は、くりかえしです。先に予告すると、JavaScriptの for は多くの人がつまずく場所です——部品が3つ、1行に詰めこまれているからです。ゆっくり解剖しましょう。
for (let i = 0; i < 4; i++) {
console.log(i);
}Ctrl+Enter でも実行できます
にわ語の「4 かい くりかえす」は、回数だけ言えば済む、よくできた省略でした。for はその省略が隠していた中身を、全部見せてくる書き方です。丸かっこの中に、; で区切られた3つの部品が並んでいます。
let i = 0——名づけです。「i という名前を作って、0と呼ぶ」。回数を数える係の誕生ですi < 4——続ける条件です。「i が 4 より小さいあいだは、くりかえす」i++——一歩です。i = i + 1の省略形で、ひとまわり終わるたびに i がひとつ増えます
実行結果を見てください。0、1、2、3——4回くりかえしたのに、最初は 0 で、4 は出ません。 ここは正直に言うと、初めて見た全員が「えっ」となる場所です。
こう読んでください。i は「いま何回目か」ではなく「もう何回終わったか」。始まる前は0回終わっていて、4回終わったら i < 4 が成り立たなくなって止まる——そう読むと、つじつまが合います。
i < 4 を i < 7 にしたら、let i = 0 を let i = 2 にしたら——予想してから、実行して確かめてください。にわ語では見えなかった「数える係」が見えるようになったぶん、途中の数を自由に使えるようになりました。
引数——レッスン5の宿題を、回収する
レッスン5で関数を作ったとき、ひとつ不便がありましたね。にわ語の関数は、呼ぶたびにまったく同じことしかできない。「大きさだけ変えて、同じ花びらを」と頼めなくて、大きさちがいの関数を別々に作るしかありませんでした。
JavaScriptの関数は、その不便を解消します。
function hanabira(size) {
console.log(`おおきさ ${size} の はなびら`);
}
hanabira(3);
hanabira(8);Ctrl+Enter でも実行できます
function hanabira(size) の丸かっこの中の size が、このレッスンでいちばん新しい部品、**引数(ひきすう)**です。呼ぶ側が hanabira(3) と値を渡すと、関数の中では size がその値へのあだ名になる——名づけが、呼び出しの瞬間に起きるのです。同じ関数を、渡す値だけ変えて2回呼べていることを確かめてください。
もうひとつ、2行目の文字列は " ではなく `(バッククォート)で囲まれています。これはテンプレート文字列といって、中の ${size} の部分に値がはめこまれます。文字列の中に、値の置き場所を空けておく書き方です。
文字だけで、山を描く
キャンバスはなくても、文字は並べられます。文字列には .repeat(回数) という「くりかえし並べる」道具が最初から備わっています。
for (let i = 1; i <= 5; i++) {
console.log("★".repeat(i));
}Ctrl+Enter でも実行できます
★が1個、2個……と増えて、山の斜面が現れたはずです。i <= 5 は「5 以下のあいだ」——今度は 1 から始めて 5 を含めています。for の部品が見えていると、こういう調整が自分でできます。
仕上げに、今日の道具を全部つなぎます。名づけ、くりかえし、関数、引数。
function yama(takasa) {
for (let i = 1; i <= takasa; i++) {
console.log("★".repeat(i));
}
}
yama(3);
yama(6);Ctrl+Enter でも実行できます
「高さを渡して、山を呼ぶ」。にわ語ではできなかったことが、できるようになりました。yama(10) を足してみてください——連峰になります。
✎ 演習1:九九の一の段
下のプログラムは、1 から 9 を出すだけです。これを直して、1 × 3 = 3 のような行が9行並ぶ「一の段」にしてください。テンプレート文字列が役に立ちます。
for (let i = 1; i <= 9; i++) {
console.log(i);
}Ctrl+Enter でも実行できます
ヒント1(考え方)
各行に必要な材料は「1」「i」「1 × i のこたえ」の3つです。こたえの部分は、テンプレート文字列の中で計算できます——置き場所には値だけでなく、式も書けるのです。
ヒント2(かたち)
console.log の中身を、バッククォートで囲んだ文字列に変えます。骨組みは 1 × 〇 = 〇 で、〇のところに置き場所 ${ } を空けます。掛け算の記号は * です。
こたえ(の一例)
console.log(`1 × ${i} = ${1 * i}`); とします。${1 * i} の置き場所では、はめこむ前に掛け算が済まされます。先に const kotae = 1 * i; と名づけてから埋めこんでも、出力が同じなら書き方が違っても正解です。
余力があれば、1 のところも名前にして、三の段や七の段に付け替えてみてください。
✎ 演習2:名前に挨拶する関数
下の関数は、誰が来ても「こんにちは」としか言いません。引数 namae を使って、はるさん、こんにちは のように相手の名前で挨拶するよう直してください。
function aisatsu(namae) {
console.log("こんにちは");
}
aisatsu("はる");
aisatsu("あき");Ctrl+Enter でも実行できます
ヒント1(考え方)
namae は、呼ばれた瞬間に「はる」や「あき」へのあだ名になっています。いまの console.log は、そのあだ名をまったく使っていません。
ヒント2(かたち)
道は2本あります。+ で文字列をつなぐ道と、テンプレート文字列に埋めこむ道——どちらでも同じ出力になります。
こたえ(の一例)
テンプレート文字列なら console.log(`${namae}さん、こんにちは`);、つなぐなら console.log(namae + "さん、こんにちは"); です。挨拶の文面があなた流でも、namae が使われていれば正解です。
3人目、4人目を呼び足して、同じ関数が何度でも働くことも確かめてみてください。
このレッスンで分かったこと
- 新しかったのは表記だけ。「と いう」=
console.log、「とよぶ」=const、付け替えるならlet - for の3部品は名づけ・続ける条件・一歩。「かい くりかえす」が隠していた中身が見えた
- 関数は引数で、呼ぶたびにちがう値を受け取れる。レッスン5の不便がここで解消された
- テンプレート文字列(
`で囲み、${ }に値をはめこむ)で、文字列に置き場所を空けられる
にわ語からJavaScriptへ、橋は渡りました。ここからは、書ける量が増えるぶん、まちがいの量も増えます。それは上達の印です。