この記事では、条件分岐・関数・スコープとは何かについて詳しく解説します。
解説:
JavaScriptにおける条件分岐は、ある条件に応じて処理を変えるための基本的な構文です。
最もよく使われるのはif文ですが、複数の条件がある場合はelse ifやswitch文も便利です。
ここでは、そんなif文を拡張して柔軟に使う方法について解説していきます。
// if / elseの基本
const score = 85;
if (score >= 90) { // 通常のifの条件分岐
console.log('とてもよくできました');
} else if (score >= 70) { // else ifを使用した条件分岐の追加
console.log('よくできました');
} else { // elseのみを使用した上記の条件に当てはまらない場合の処理
console.log('がんばりましょう');
}
ポイント: 条件は上から評価され、最初に一致したものだけが実行されます。
elseはどの条件にも当てはまらない場合の「最終手段」として使います。
// switch文の例
const fruit = 'りんご';
switch (fruit) {
case 'りんご':
console.log('赤くて甘い果物です');
break;
case 'みかん':
console.log('冬に人気の柑橘類です');
break;
case 'ぶどう':
console.log('房になっている果物です');
break;
default:
console.log('知らない果物です');
}
ポイント:switch文は、値が「完全一致」した場合にだけ該当ブロックが実行されます。
各caseの末尾にbreakを入れないと、次のブロックまで処理が流れる(フォールスルー)点に注意しましょう。
// 三項演算子を使った例
const age = 20;
const result = (age >= 18? '大人' : '未成年');
console.log(result); // 結果 : 大人
ポイント: 三項演算子は、1行で書けるシンプルな条件分岐に向いています。
短い条件分岐で読みやすさを優先する場合は参考条件演算子、複雑な処理にはif文を使うのがおすすめです。
解説:
関数とは、複数の処理をひとまとめにして、繰り返し使えるようにするための仕組みです。
JavaScriptでは、functionキーワードを使って関数を定義できます。
また、近年はアロー関数もよく使われています。
まずは基本のfunction構文を使った関数の定義と実行方法です。
// 通常の関数定義と呼び出し
function greet(name) {
return 'こんにちは、' + name + 'さん';
}
const message = greet('太郎');
console.log(message); // 結果 : こんにちは、太郎さん
ポイント: 関数は「定義 → 呼び出し」という流れで使います。
returnで戻した値は、変数に代入して再利用できます。
functionの代わりに、矢印(=>)を使って書くのがアロー関数です。
// アロー関数で同じ処理を書く
const greet = (name) => {
return 'こんにちは、' + name + 'さん';
};
console.log(greet('花子')); // 結果 : こんにちは、花子さん
ポイント: アロー関数は、短く書けて見やすくなる場面に便利です。
処理が1行ならreturnも省略できます。
関数には引数(パラメータ)を渡すことができ、処理の結果を戻り値として返すこともできます。
// 複数の引数と戻り値の例
function add(a, b) {
return a + b;
}
console.log(add(3, 5)); // 結果 : 8
ポイント: 戻り値が必要ない場合は、return文を省略しても構いません。
関数は、共通の処理を何度も呼び出せる「再利用可能な部品」として使います。
解説:
スコープとは、「変数が有効に使える範囲」のことです。
JavaScriptでは、関数ごと、{ } ブロックごとにスコープが発生します。
また、スコープに関連して「クロージャ」という重要な概念も登場します。
varは関数スコープ、let/constはブロックスコープです。
// スコープの違い
function example() {
if (true) {
var a = 'varの変数';
let b = 'letの変数';
const c = 'constの変数';
}
console.log(a); // 結果 : varの変数
console.log(b); // エラー(スコープ外)
console.log(c); // エラー(スコープ外)
}
ポイント: letとconstは、定義されたブロックの中だけで使えます。
予期せぬバグを防ぐためにも、原則はlet/constを使うのが現代的な書き方です。
クロージャとは、「関数の外で定義された変数を覚えている関数」のことです。
たとえば、ある関数がメモを引き出しにしまって、それを別の関数があとで読み返すようなイメージです。
outer()
└── let count = 0
└── function inner()
└── count を参照(← outerの変数)
→ inner は outer の変数(count)を「覚えている」ので、outer が終わったあとでも使える// クロージャの例
function outer() {
let count = 0;
function inner() {
count++;
console.log(count);
}
return inner;
}
const counter = outer();
counter(); // 結果 : 1
counter(); // 結果 : 2
ポイント: inner関数は、outer関数の中にあったcount変数をずっと覚えています。
outerはもう実行を終えているのに、そのスコープ内の変数を使い続けられるのがクロージャの特徴です。
これは「状態を保存しながら何度も使える関数」が必要なときに便利です。
このように、「関数の実行が終わっても変数を保持し続けられる」のがクロージャの最大の特徴です。