0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JavaScriptにおける「式」と「文」

0
Last updated at Posted at 2026-01-31

JavaScript、そして React を深く理解するために避けて通れないのが
「式(Expression)」と「文(Statement)」の区別 です。

この違いを理解すると、

  • なぜ JSX に if が書けないのか
  • なぜ x = 1 が関数の引数に書けるのか
  • なぜ Python などを考えると JavaScript がややこしく感じるのか

といった疑問が一気に解消されます。


1. 基本:式と文の役割

項目 式 (Expression) 💎 文 (Statement) 🛠️ 📣🧑‍🏫👉 
役割 値を作り出す、計算する 処理を実行する、構造を作る
結果 値を返す(値になる) 値を返さない(実行のみ)
代入 変数に代入できる 変数に代入できない
x + 1, true, obj.prop if, for, switch, const

2. 言語による「境界線」の違い

「何が式で、何が文か」は言語によって異なります。
特に JavaScript と Python の違い は、「違和感」の正体になりやすいポイントです。

比較項目 JavaScript Python
x=1 
代入 (=) 式(値を返す)
console.log(x = 1) が可能
文(値を返さない)
print(x = 1) はエラー
条件分岐 文(if
値を返さない
文(if
値を返さない
式としての条件分岐 三項演算子
a ? b : c
条件付き式
b if a else c

💡 JS の特異点

JavaScript では、x = 1 という代入そのものが
「1」という値を返す式 です。

そのため、次のようなトリッキーな記述が可能になります。
そのため、関数の引数の中で代入を行うといったトリッキーな記述が可能になっています。

3. React (JSX) での「式の掟」

ReactのJSX(return ( ... ) の中)にある { } には、「式(値になるもの)」しか書けないという非常に厳しいルールがあります。

❌ 書けない例(文を入れようとしている)

JSXの中で if 文や for 文を直接動かそうとすると、構文エラーになります。

function MyComponent() {
  const isLogin = true;

  return (
    <div>
      {/* ❌ 構文エラー:ifは「文」なので中に入れられない */}
      {
        if (isLogin) {
          return <p>ようこそ</p>
        }
      }
    </div>
  );
}

✅ 書ける例(式を入れている)

「値として評価されるもの」であれば何でも書けます。

function MyComponent() {
  const isLogin = true;
  const users = ["Alice", "Bob"];

  return (
    <div>
      {/* 💎 1. 三項演算子(式なのでOK) */}
      {isLogin ? <p>ようこそ</p> : <p>ログインしてください</p>}

      {/* 💎 2. 論理演算子(式なのでOK) */}
      {isLogin && <button>ログアウト</button>}

      {/* 💎 3. map関数(値を返す式なのでOK) */}
      <ul>
        {users.map(user => <li key={user}>{user}</li>)}
      </ul>

      {/* 💎 4. 関数呼び出し(実行結果が値になるのでOK) */}
      <p>{new Date().toLocaleDateString()}</p>
    </div>
  );
}

4. 見分け方のコツ

もっとも簡単な見分け方は、**「console.log() の引数に入れられるか?」**です。

// 【式】は値なので、ログに出せる
console.log(1 + 2); // 3 (OK)

// 【文】は値ではないので、エラーになる
console.log(if (true) { 1 }); // SyntaxError (NG)

💡 疑問:返り値のない関数呼び出しは?

return がない関数(実行すると undefined が返るもの)も 「式」 です。JavaScriptでは、何も返さない関数は暗黙的に undefined という値を返しているとみなされるためです。

function sayA() { console.log('a'); }
const result = sayA(); // resultには undefined が入る (OK)

5. なぜ React でこの知識が必要なのか?

ReactのJSX(return ( ... ) の中)の { } には、「式」しか書けないというルールがあるからです。

{} の中に入れられるもの(式): map(), 三項演算子, 変数名, 関数呼び出し

{} の中に入れられないもの(文): if, for, switch, const などの宣言

解決策

JSにおいて if や for は「宝石(値)」ではなく、ただの「命令」です。そのため、JSXの中で条件分岐をしたい場合は、「式」である三項演算子や論理演算子 (&&) を使う必要があります。

6. まとめ

式 (Expression) は「宝石 💎」。評価されると値になり、どこにでも持ち運べる。

文 (Statement) は「道具 🛠️」。何かを組み立てるための命令であり、それ自体を袋(変数や引数)に入れることはできない。

Reactを書くときは、常に「今から書くのは宝石(式)か、道具(文)か?」を意識すると、エラーに悩まされることが少なくなります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?