Pythonプログラミングを始めたばかりで、Elif
キーワードについて疑問に思っています。
使用する前に使用した他のプログラミング言語else if
。 Python開発者が追加のElif
キーワードを追加した理由は誰にも分かりますか?
何故なの:
if a:
print("a")
else if b:
print("b")
else:
print("c")
ほとんどの場合、それは構文糖です。 Visual BasicのWend
と同様。
Cに似た構文を持つ言語は、_else if
_を無料で取得します。実装する必要はありません。
その理由は、構文制御構造が次のステートメントで単純に動作するためです。必要に応じて、中括弧で囲まれた複合ステートメント(例:_{ x += 1; y += 1 }
_)を使用できます。
これは、if
とelse
を実装すると、_else if
_は無料で自然に言語の文法から外れるだけで、それ以上の実装作業は必要ありません。理由を確認するには、これを見てください:
_if (condition) {
if_body();
} else if (another_condition) {
else_if_body();
} else {
else_body();
}
_
これは、_else if
_とif
が添付されたelse
に似ており、それぞれが複合ステートメントに適用されます。しかし、実際にはそうではありません。これは、実際には2つの個別のif
ステートメントであり、それぞれに1つのelse
ケースがあります。 2番目のif
ステートメントは、最初のelse
ステートメントのif
の本体内にあります。
_else if { ... }
_は、次のステートメントに適用されるelse
として実際に解析されます。これはif
ステートメント(複合ステートメント{ else_if_body(); }
に適用されます。その後、最後のelse
は2番目の直前のif
にバインドします1。
これは、解析方法に沿ってより多く記述されたものと同じです1:
_if (condition) {
if_body();
} else {
if (another_condition) {
else_if_body();
} else {
else_body();
}
}
_
しかし、言語がif
ステートメントのファーストクラスオプションとして_else if
_を直接実装した場合、exactlyのif
内の2番目の独立したelse
ステートメントと同じになります最初!したがって、_else if
_を実装する必要はまったくありません。言語実装者は、if
およびelse
を実装すると、このスタイルの構文で_else if
_を無料で取得できます。
Pythonの構文では、この無料サービスは許可されていません。
Cスタイルの構文のプログラマは、言語がif
を正確にゼロまたは1つのelse
しか持たない場合でも、_else if
_に関して思考できますが、それは最初の例のようなコードを書くことができるからですこれは、コンパイラーとは人間の読者にとっては異なるようにフォーマットされています。
Python(OTOH)は、インデントを使用してブロック構造を示します。これにより、ブロック構造は、インタプリタと同じように人間の読者に同じように見えます。2。 Pythonスタイルの構文でif
とelse
を取得したら、プログラマーは、最初のif
ステートメント内に2番目のelse
ステートメントを挿入することにより、else-ifと同じように動作のコードを作成できます。しかし、それは次のようになります。
_if condition:
if_body()
else:
if another_condition:
else_if_body()
else:
else_body()
_
これは見苦しく、1つまたは2つ以上のelse-ifを取得すると、else-ifチェーンよりもはるかに複雑になります。したがって、else-ifの観点から考える能力を取り戻すために、明示的な言語機能を追加する価値があります。技術的には言語がより複雑になりますが、実際には言語がより単純になるという点で思考になるため、非常に複雑です。 if
s内のネストされたelse
sの手動で構築されたチェーンでは、リーダーはすべてのコードを手動で読み取り、最後を除くすべてのelse
がif
ステートメントを1つだけ含むことを確認して、シーケンス全体が線形チェーンと同等であると結論付けます正常にチェックされた条件のうち、成功した最初のチェックのために実行するコードがあります。
それで。 Cに似た構文を持つ言語は、_else if
_を使用することもあります。無料で入手できるためです。それが存在する理由です。 Pythonのような構文を持つ言語は、else-ifとして使用できる構造を取得するために、明示的に何かを行う必要があります。なぜElif
を選択したのですか?それはarbitrary意的です;実際に決定を下した人に尋ねる必要があります。
しかしPythonはElif
を発明しなかった、それはPythonが存在するずっと前に他の言語で存在していた。だから私はguess明示的なelse-ifコンストラクトを実装する必要があり、プログラマーがすでによく知っているものを選択しました。
1 技術的には、これは、制御構造で常に中括弧を使用することに真剣に取り組む人々がコードを書く方法です。 ;)
2 これに対する反例は確かに作成できますが、これはインデントベースの構文の一般的な考え方です。
かっこを避けるため^ H ^ H ^ H ^ H ^もし戦争なら。
else if
があるC/C++では、多くの異なるスタイルでコードを構造化できます。
if (...) {
...
} else if (...) {
...
}
if (...) {
...
}
else if (...) {
...
}
if (...) {
...
} else
if (...) {
...
}
// and so on
代わりにElif
を使用すると、Elif
を記述する方法が1つしかないため、このような戦争は発生しません。また、Elif
はelse if
よりもはるかに短いです。
仕方ないよ。 Javascript はelse if
を使用し、 php はelseif
を使用し、 Perl はelsif
を使用し、Cプリプロセッサおよびpython use Elif
。それらのいずれも間違っていません。同じことを行うためにわずかに異なる構文を選択するだけです。
「else-if」と「final else」を区別するのに役立つと思います。
Elifは他の言語のスイッチの一種の代替品ですが、より強力です
たとえば、Cで書く
switch(number){ case 1: doA() break; case 2: doB() break; case N: doN() break; default: doSomethingElse() break ; }
in Pythonあなたが書く
if番号== 1:doA() Elif番号== 2:doB() Elif番号== N:doC() else:doSomethingElse ()
ご覧のとおり、Elif
はより強力です。スイッチよりも複雑なステートメントを配置でき、さらにif/else
ステートメント