日々の積み上げブログ

プログラミングを習得したい

2022/05/04(水)~ 05/05(木) JSprimer(文と式)

2022/05/04(水)~ 05/05(木) JSprimer(文と式)

JavaScriptは、(Statement)と(Expression)から構成されています。

(Expression)とは、値を生成し、変数に代入できるもののことを言います。式の特徴として、式を評価すると結果の値(評価値)を得ることができます。
つまり、評価した結果を変数に代入できるものはです。

// 1という式の評価値を表示
console.log(1); // => 1
// 1 + 1という式の評価値を表示
console.log(1 + 1); // => 2
// 式の評価値を変数に代入
const total = 1 + 1;
// 変数に代入した式の評価結果を出力
console.log(total); // => 2
// 関数式の評価値(関数オブジェクト)を変数に代入
const fn = function() {
    return 1;
};
// fn() という式の評価値を表示
console.log(fn()); // => 1

(Statement)とは、ブラウザ(PC)に対してプログラムのソースコードを使って命令するときのひとまとまりのことです。
JavaScriptでは、セミコロン(;)を使って文を区切ります。つまり、セミコロンまでが1つの文です。

ソースコードとして書かれたを上から処理していくことで、プログラムが実行されます。

// セミコロンで文を区切る
// セミコロンまでが1つの文
処理する文;
処理する文;
処理する文;
const isTrue = true;
// isTrueという式がif文(文)の中に出てくる
// 式を文の処理の一部として埋め込むことができます。
if (isTrue) {
}

文と式の違い

文はそれ単独で完結する言語要素です。式はそれ単独では基本的に完結せず、文または式の一部として使用される言語要素です。また、式の最大の特徴として、値を返すという点が挙げられます(文は値を返しません)。 例えば、定数式はその値そのものを返します。条件式は真偽値(True/False)を返す式です。 式(Expression)と文(Statement) - よねKENのプログラミング研究

  • 式は、単独では成り立たず、文の処理の一部として埋め込むことができる言語要素です。
  • 文は、単独で成り立つもので、何らかの意味のある処理を行う1つの実行単位です。
  • 式は、値を返すが、文は値を返しません。
  • 式は文の一部になれますが、if文やfor文などの文は、式になることができません。(文は、変数に代入することができません。)
// 構文として間違っているため、SyntaxErrorが発生する
var forIsNotExpression = if (true) { /* ifは文であるため式にはなれない */ }

式文

(Statement)は(Expression)になることはできませんが、(Expression)は文の一部として埋め込むことができるため、(Statement)になることができます。
文の一部として埋め込まれた式のことを式文と呼びます。基本的に文が書ける場所には式を書けます。
式文(Expression statement)は文の一種であるため、セミコロンで文を区切ります。

// 式文であるためセミコロンをつけている
式;

ブロック文

文を{}で囲んだ部分をブロックと言います。 ブロックには、複数の文を書くことができます。
文の末尾にはセミコロンが必須ですが、例外でブロックで終わる文の末尾には、セミコロンが不要です。

// ブロックで終わらない文なので、セミコロンが必要
if (true) console.log(true);

// ブロックで終わる文なので、セミコロンが不要
if (true) {             // if文の処理内容に複数の文を書いている
    console.log(true);  // ブロック内には、複数の文を書ける
    console.log(false);
}  // ブロック文は、末尾にセミコロン不要(例外)
  • ブロック文は、if文やfor文など他の構文と組み合わせて書くことがほとんどです。

function宣言(文)とfunction式

関数を定義するには、functionキーワードから文を開始する関数宣言と、変数へ関数式を代入する方法があります。
関数宣言(文)と関数式は、どちらもfunctionというキーワードを利用しています。

// ①learn関数を宣言する関数宣言文
function learn(仮引数) {
    // 関数の処理
}
// ②関数式(匿名関数)をread変数へ代入
const read = function(仮引数) {
    // 関数の処理
};

// ②の書き換えバージョン
function fn() {}
// fn(式)の評価値を代入する変数宣言の文
const read = fn;

関数宣言(文)と関数式のセミコロン有無の違い

  • ①関数宣言(文)は、ブロックで終わる文であるため、セミコロンが不要となっています。
  • ②の関数式を変数へ代入したものは、変数を宣言する文の一部として匿名関数という式を埋め込んでいるだけなので、末尾にセミコロンが必要になります。

まとめ

  • JavaScriptは文(Statement)と式(Expression)から構成される
  • 文は式になれない
  • 式は文になれる(式)
  • 文の末尾にはセミコロンをつける
  • ブロックで終わる文は例外的にセミコロンをつけなくてよい

参考

JSPrimer-文と式

式(Expression)と文(Statement) - よねKENのプログラミング研究

プログラミングにおける式と文とは