質問: 1行if文は公式ドキュメントのどこに掲載されていますか? 1行if文は波括弧を省略して1行で書くこともできる、と思っていたのですが、 elseがないif文は全て波括弧を省略できる、のですか? elseがないif文は波括弧を省略できる、だから、1行if文はelseがないから波括弧を省略できる、ということですか?
回答: @OOPer さん回答の補足になると思います。 公式ドキュメントだと、if や 式 は明示的なタイトルのあるページがあって判りやすいですが、`文`はそれがありません。 探すと`制御構造`の`はじめに`に書いてある内容が`文`の説明にあたるようです。紛らわしいですね。 PHPの方は全文を引用します(太字は引用者)が、もう一つのリンク先の説明を組み合わせると、質問の状況になるでしょう。 PHP: はじめに - Manual > > はじめに > > **すべての PHP スクリプトは、一連の文からなります。** 文としては、代入、関数コール、ループ、条件文、そして何もしない文(空の文) さえ使用することができます。 **文は、通常セミコロンで終了します。** 加えて、**文は、中括弧によるグループ文で カプセル化することによりグループ化することが可能です。 グループ文は、同時に文にもなります。** 本章では、様々な文の型について説明します。 > > > 2019年度「プログラミング言語」配布資料 (14) > > 空白文字 > > 空白文字(blank characters)は,トークン間の区切りを明示する役割は果たすが,構文解析の段階では無視する(トークンとして現れない)ことが多い.この講義で扱った言語では,**スペース,タブ,改行文字は一括して空白文字として扱われ全て構文解析の段階では無視されるので,改行をスペースに置き換えたり,その逆をしてもプログラムとしては全く同じく扱われる.** (字句・構文解析技術が成熟していなかった頃の)古いプログラミング言語では,行が特殊な意味を持つものも多い.また,逆に最近の言語(Haskell, Pythonなど)では,ひと固まりの処理(C言語, Java での {} で表されるブロック)などを表すために,括弧などの記号ではなく,字下げ(行頭からの空白の)量を利用するものもあり,そういった言語ではスペースと改行は厳密に区別される.また,エディタ上では何も表示されないのに空白文字ではない,という文字(典型的にはいわゆる全角スペース)もありうるので注意が必要である. > > > * PHPスクリプトは`文`が集まったもの * `文`はセミコロンで終了する(区切られる) * 中括弧(波括弧)の中に複数の文を入れてグループ化したものも1つの文として扱われる * `if構文`は、`if`に続く`括弧で囲まれた1個の式`と、それに続く`1個の文`で構成される * 構文解析上、スペース/タブ/改行文字は一括して空白文字として扱われる言語がある(PHPはこれに属するようです) PHP: パーサトークンの一覧 - Manual ということで、ifの説明にあった以下のものは、 ``` if (式) 文 ``` こちらと等価になるでしょう。 ``` if (式) 文 ``` そしておそらく中括弧(波括弧)が使われても1行で書けるものと思われます。(ですよね?) まあこんな風に書く人はほぼ居ないでしょうけど。 ``` if (式) { 文 文 文 文 } ``` ちなみに8年前の投稿で Down Vote されてますが、こんなコメントが PHP: else - Manual にありました。 @OOPerさんの「したがって「elseがないif文」かどうかにかかわらず、条件付きで実行されるのが「1つの文」であれば、波カッコは必要ありません。」の例でしょう。 php at keith tyler dot com > > This is valid syntax: > > > > ``` > if ($a) print "a is true"; > else print "a is false"; > ?> > > ``` > > A holdover from the bash-style compatibility in older PHP versions, perhaps. > > > これは有効な構文です: > > おそらく、古いバージョンのPHPのbashスタイルの互換性からの名残りです。 > > >