1

Karelをベースにした、子供向けの簡単なプログラミング言語に取り組んでいます。プログラムフローを制御するために、私は現在これらの機能を(擬似コードで)提供しています:

  • パラメータなしの手順の定義
  • [ない]表現ステートメントの場合
  • 一方[ない]表現ステートメント

手続きから戻る手段がなく、声明も出さない。else

例として、次のコードを取り上げます。

if something
 statement1
if not something
 statement2

コードの実行はに流れ、 trueの場合ifに実行されます。次に、 trueでないかどうかをテストし(ただし、プログラムの状態が変更されました!)、を実行します。これにより、両方のテストが成功する可能性があります。statement1somethingsomethingstatement2

これはプログラマーを制限しますか?これまでのところ、if... if not...を使用するか、if not最初にを使用してから、を使用するだけで、すべての例の問題を解決することができましたif

だから、私の質問は: ステートメントを追加する必要がありますか?elseキーワードが増えると、言語が少し複雑になります。より複雑ではありますが、ステートメントを使用して解決できるすべての問題は、elseステートメントがなくても解決できますか?

それとも、ステートメントを省略すると、else実際に言語がより複雑で直感に反するものになりますか?

4

4 に答える 4

3

意味的に言えば、else構成を回避することはできますが、実用的な観点からは、そうする必要はないと思います。

何かが真実である場合に何かを行うという概念、そうでなければ他の何かがそれほど奇妙で混乱しない場合、否定をチェックするためだけに式を再度評価して否定する必要があることは実際には非常に簡単に聞こえます。追加の複雑さはありません」)言語を開発するときに自動的に行われるオプションの同期シュガー。

私は他の多くの機能がステートメントと比較して本当に役に立たないのを見ましたelse..それならあなたは状態を2回評価することが副作用複雑さ(無駄なCPU?)またはあなたがすでに計算したという事実自体に有害であるという事実を考慮していませんそれとあなたはそれが意味があるからではなく、言語の欠如のためにそれをもう一度しなければなりません。

于 2010-11-21T22:37:58.580 に答える
3

評価に費用がかかる場合は、評価が2回実行されるため、something使用している言語で問題が発生する可能性があります。else

もう1つの潜在的な問題は、statement1が値を変更できる場合、something両方テストが成功する可能性があることです。これは、他の方法を使用した場合には発生しなかったことです。

もちろん、これらの問題は、結果を一時的なローカル変数に格納することで軽減できます。

bool result = something
if result
    statement1
if not result
    statement2

したがって、プログラマーに可能なことを制限しているわけではありませんelse。上記のアプローチを使用することで、プログラマーを使用せずに実行できるすべてのことを実行できます。しかし、毎回書くのはもう少しコードであり、許可すれば回避できる、不注意なプログラマーにいくつかの新しい潜在的な問題をもたらしますelse

于 2010-11-21T22:30:27.320 に答える
1

あなたsomethingのアプローチよりも副作用がある場合、それらは2回発生しますが、これはおそらくあなたが望むものではありません。

于 2010-11-21T22:33:03.870 に答える
0

私見子供たちにコードを複製するように教えるのは悪い考えです。

于 2010-11-21T22:33:41.410 に答える