対象読者
- プログラミングを始めたばかりの人
なぜこの記事を書いたのか
- プログラミングには数々の初心者殺しがあり、それらをどうやったら倒せるのかを伝えたい
共通事項
- 分からなければ一旦先に進む
- 分からないことに囚われすぎると時間を浪費し、時間が足りなくなって殺される
- 「これは復習が必要だ!!」と思ったら、次の通りに学習する
- 1行ずつ理解する
- 1行ずつ (必要であればもっと細分化して) コメントを書くなどして学習する
- 実務でやると「不要だから消して」と言われるので学習用のコードでやる。
納品用のコードでやるならレビュー前に消す。
代入
-
=
を ← (左向きの矢印) と読み替える-
=
から「等しい」を連想していると==
が出てきて殺され、!=
や+=
にオーバーキルされる
-
- 「右辺の演算結果」を「代入する」ことを理解する
- これを理解していないと
n = n + 1
に殺される
- これを理解していないと
学習コメントサンプル
// (1)変数 a を宣言する
// (2)2 を生成する
// (3)a に 2 を代入する
let a = 2;
// (1)変数 b を宣言する
// (2)3 を生成する
// (3)b に 3 を代入する
let b = 3;
// 変数 c を宣言する
let c;
// (1)a+b を計算する
// この時点で a=2, b=3 なので a+b=5
// (2)c に 5 を代入する
let c = a + b;
// (1)c+9 を計算する
// この時点で c=5 なので c+9=14
// (2)c に 14 が代入する
c = c + 9;
反復
- 「反復回数を制御すること」と「反復対象の処理を書くこと」は 別々にやる
- 同時にやると混乱しているうちに殺される
- 反復回数を正しく制御できたあとに反復対象の処理を書こう
- 条件式は「__継続__条件」であることを理解する
- 日本語だと「〇〇になるまで続ける」と言うので終了条件と勘違いして殺される
- 「〇〇になるまで続ける」ではなく「〇〇にならないうちは続ける」と言い換えよう (終了条件を逆にすれば継続条件になる)
2重ループサンプル(九九の表示)
// まずはこれだけ書いて実行してみる
for (let i = 0; i < nums.length; i++) {
console.log(i);
}
// 次はこれで実行してみる
// 新人プログラマの多くは外側の反復をコピって内側の反復を作るが j に変えるのを忘れて殺される
// 表示結果を見ても分からないときは console.log(i + '==============') に変えて見やすくしてみよう
for (let i = 1; i <= 9; i++) {
console.log(i);
for (let j = 1; j <= 9; j++) {
console.log(j);
}
}
// 反復回数を正しく制御できていることが分かったので反復対象の処理を書く
for (let i = 1; i <= 9; i++) {
console.log(i + '==============');
for (let j = 1; j <= 9; j++) {
console.log(j);
console.log(i * j); // 反復対象の処理
}
}
// 最後に確認用の console.log() を消す
for (let i = 1; i <= 9; i++) {
for (let j = 1; j <= 9; j++) {
console.log(i * j); // 反復対象の処理
}
}
関数
- 「コードは上から動く」という考えを 捨てる
- この考えを後生大事に持っていると、関係ないコードをすべて読むことになり殺される
- 関数の中身は必要になるまで 見ない
- 必要になるまではブラックボックスとして扱う
- 中身は関数と引数の名前から予想できるようにしておく (それぐらいのIT用語力 & 英語力をつける)
// 最初に関数が出てくるが一旦無視すること
// merge(arr1, arr2) だから「2つの配列を結合するんだろうなぁ」ぐらいが予想できれば良いし、
// 戻り値を console.log() or デバッグすれば確認できる。
// ここで「JavaScript ...」とか調べ始めると良さげな情報が無さすぎて殺されるし、今この瞬間に必要な知識ではない
function merge(arr1, arr2) {
return [...arr1, ...arr2];
}
let mergedArr = merge([4, 3, 1, 2], [7, 8, 6, 9]);