JavaScriptでのプログラミングとして、ステートメントとブロックで実行できるすべてが式だけで実行できることに気づきました。プログラミング言語は式のみで問題なく動作しますか?そして、もしそうなら、なぜステートメントがまったく使われるのですか?
JavaScriptでのプログラミングとして、ステートメントとブロックで実行できるすべてが式だけで実行できることに気づきました。プログラミング言語は式のみで問題なく動作しますか?そして、もしそうなら、なぜステートメントがまったく使われるのですか?
回答:
承知しました。最も簡単な方法は、現在ステートメントであるすべての構成に結果値を割り当て、それを式に変換することです。ただし、これは必ずしも有用または意味があるわけではありません。唯一の潜在的な利益は、概念的な単純さのビットです。ただし、場合あなたがして(代わりに他の演算子と関数を経由してチェーンを必要とする)セミコロンやループのようなものを取り除くに進み、多額のステートメントを使用してプログラムが醜くなります。
これを行うためのより根本的でありながら意味のある方法は、ほとんどすべてのものが意味のある値を持つように言語を設計し、他の効果ではなく、ほとんど常にその意味のある値の式を使用する方法で使用することです。関数型プログラミング言語がこれを行います(たとえば、Haskellには式ではない宣言があります)。
命令型パラダイムでは、有用な結果値を持たない多くの一般的な操作があり、シーケンシャル命令の概念(計算ではなく)がそのパラダイムに非常に適合するため、ステートメントが使用されます。プログラムの大部分が状態を変化させている場合、新しい値を計算するのではなく、値を生成することを要求しても意味がありません(forループの結果はどうなりますか?)。対照的に、パラダイム(FP)全体が値の計算に基づいて構築されている場合、結果値を持たない外れ値は例外を保証しません。代わりに、意味のないセンチネル結果を与えます。
「ステートメント」と「式」の定義方法によって異なります。
非常に厳密な定義では、「副作用があるもの、おそらく戻り値があるもの」としてのステートメントと「戻り値はあるが副作用がないもの」としての式を区別します。このような定義では、少なくとも1つのステートメント(式を評価してその戻り値を出力する必要があります)がないと、意味のあるプログラムを作成できません。純粋な式だけでは、プログラムの外部と対話できません。純粋でない部分が言語からサポートエコシステムに移動された場合、言語だけでも完全に純粋です(つまり、ステートメントがありません)(言語には定義と式があるが、Haskellはまさにそれを行います)。 。
ただし、式で副作用を許容すると、ステートメントと式の区別が恣意的になり、興味が減ります。もちろん、式のみで構成されるプログラミング言語を作成することもできます。ほとんどのLisp方言はそのように動作します。このような状況では、式の副作用を評価することは、ステートメントを実行することとほとんど同じであり、そのような言語では、式とステートメントは同じものであると主張することができます。したがって、ステートメントと式の違いは構文のみです。
技術的な理由ではなく読みやすさのために有用であるため、多くの言語はこの構文の区別を依然として行っています。何かを式にすると、その戻り値に関心があることを示しますが、副作用は少なくなります。これをステートメントにすることは、副作用を引き起こす意図があることを読者に知らせ、戻り値は興味深い場合とそうでない場合があります。
はい。
関数型言語(および単一代入言語)はすべて式です。例はHaskal(およびSISAL)です。ここで、ifステートメントとforループの両方が値を返します。
言語には他にもクラスがあります。簡単に思い浮かぶのは宣言型言語です(ステートメントに依存しない言語は他にもたくさんあると思います)。これらの言語では、式は必要ありません(通常考えるのと同じ意味で)。あなたは真実を宣言し、あなたは複数の結果を得ることができます。ここで簡単なのはprolog
です。