エリクシールは、他の言語の「リターン」キーワードに相当しますNO「抜け出す」キーワードを持っていません。
通常、実行する最後のステートメントが戻り値になるように、コードを再構成する必要があります。
以下
「」あなたの最初の例のように、アレイの種類を振る舞うものとして、あなたが意味と仮定して、あなたのコードのテストと同等のものを実行するためにエリキシルで慣用の方法である:実際に何が起こっている
def is_there_a_22(a) do
Enum.any?(a, fn(item) -> item == "22" end.)
end
ここで私たちは思考を少しずつ再構築しています。手続き型アプローチの代わりに、配列を検索して、探していたものが見つかると早期に戻ると、コードスニペットで実際に何をしているのかを尋ねます: "この配列には22どこに? "
私たちは、エリキシルのEnumライブラリを使用して配列を実行し、any?
関数に、私たちが気にしていた条件に一致するものがあるかどうかを示すテストを提供します。
これは列挙で簡単に解決できるケースですが、質問の中心は手続き型メソッドで使用される「バウンサーパターン」などのものに多く当てはまる可能性があります。たとえば、方法で特定の基準を満たしている場合は、すぐに戻ります。この良い例は、あなたが仕事をやろうとしている事がnullの場合はfalseを返すメソッドのようになります。
function is_my_property_true(obj) {
if (obj == null) {
return false;
}
// .....lots of code....
return some_result_from_obj;
}
本当に万能薬ではこれを実現する唯一の方法は、アップフロントガードを置くことで、方法を除外してください:
def test_property_val_from_obj(obj) do
# ...a bunch of code about to get the property
# want and see if it is true
end
def is_my_property_true(obj) do
case obj do
nil -> false
_ -> test_property_value_from_obj(obj)
end
end
tl;いいえ、同等品がありません - それに応じてコードを構造化する必要があります。反対に、これはあなたの方法を小さく保つ傾向があり、あなたの意図ははっきりしています。
早戻しのもう1つの例を次に示します。http://elixir-examples.github。io/examples/return-early – Brandon
@Brandon、ありがとう、その例では "some_condition"がfalseなら "do_something()"が出力する値を出力します? –
それはまったくばかげた質問ではありません。命令型言語に慣れてきたときに計算された最後の値を返すすべての関数の概念に慣れるのは本当に難しいです。それに固執する - すべての関数が値を返すという考えに慣れれば、関数がより密接になることがわかります。 –