2
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】「式」と「文」の違い

2
Posted at

はじめに

JavaScriptの式と文について理解が曖昧だったのでまとめます。

問題

関数で値を返す時に返せるものとそうでないものがあり、その違いを調べたら式と文にたどり着いた。

解決

結論から書くと

  • 式とは何らかの値を返すもの(文字列、数値、関数など)
  • 文とは値を返さないもの(if文、for文、swich文)
    になります。

分かりやすい見分け方としては変数に代入出来るものが式代入出来ないものが文になります。

式は評価されて値となり、変数や引数で使うことが出来ます。
以下は式の例です。

1 // 数値

"文字列" //文字列

1++ // インクリメント・デクリメント

1 + 1 // 式 + 演算子

1 == 1 // 等価演算子 

[...ary] // スプレッド構文

const fn = function() { // 関数式
    return 1;
};

fn(); // 関数の実行

1 ? true : false // 三項演算子

文は特定の処理を行うための命令でそれ自体を変数や引数で使うことは出来ません。
以下は文の例です。

let a; // 変数宣言

if() {} // if文

for(){} // for文

while(){} // while文

swich(){} // swich文

関数で返せるのは式のみ

値を返す/返さないの違いから関数でreturn出来るのは式のみになります。

:o:問題無い書き方の例

const isLogin = true;
function fn () {
    // 三項演算子は式なのでreturnで返せる
    return isLogin ? console.log("ようこそ!") : console.log("ログインしてください");
}

:x:エラーになる例

const isLogin = true;
function fn () {
    // if文は文なのでreturnで返せない
    return if(isLogin) {
        console.log("ようこそ!");
    } else {
        console.log("ログインしてください");
    }
}

そのため、JSX内でも式のみが使用できます。

:o:式のみ書ける例

const MyComponent = ()=> {
  const isLogin = true;

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

:x:文を入れて書けない例

const MyComponent = () => {
  const isLogin = true;

  return (
    <div>
      {/* 構文エラー:ifは「文」なので中に入れられない */}
      {
        if (isLogin) {
          return <p>ようこそ!</p>
        } else {
            return <p>ログインしてください</p>
        }
      }
    </div>
  );
}

おわりに

バニラのJSを書く時は式と文について全く意識してませんでしたが、ReactでJSXを書く時は理解してないと思わぬところで躓きますね。(自戒)

参考

2
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
2
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?