短絡的な評価、三項演算子、ループからの脱却、単純なキーワードによるメソッドからの脱却を夢見ることはないでしょうか?
もう、そんな夢は捨てろ!私たちは、4Dフォーラムで寄せられた機能要求に耳を傾け、コードをシンプルにするための4D言語の改良を行いました。
return, continue, and break
2つの新しいステートメントを追加し、コードのブロックからジャンプアウトできるようになりました。
- という return キーワードは、そのキーワードが出現したメソッドや関数の実行を終了し、呼び出したメソッドに制御を返します。また、オプションの値を返すこともできます。
function factorial ( $n : Integer) : Integer
If ($n<1)
return 1
Else
return $n*factorial($n-1)
End if
- キーワードは、そのキーワードを含むループを終了させます。 break キーワードは、そのキーワードを含むループを終了させます。実行される次の文は、ループの本体の直後の文です。
For ($i; 1; 100)
If ($myTab{$i}="")
break
End if
End for
If ($i<101)
// your code
End if
- この continue ステートメントは、現在のループの反復中のステートメントの実行を終了させ、次の反復でループの実行を継続します。
For ($i; 0; 10)
If ($i=3)
continue
End if
$text+=String($i)
End for
// $text="012456789"
短絡的な評価
ANDまたはOR演算子を使用する式において、短絡評価は、第1引数が式の値を決定するのに十分でない場合にのみ、第2引数を実行または評価することを意味します。そのために、2つの新しい演算子を追加しました。
この新しいAND演算子とOR演算子の書き方によって、この種のテストを1行で書くことができます。
if (($myColl.length>0) && ($myColl[$i]>10))
// your code
End if
$myColl が空の場合、第二引数は実行されないので、エラーは発生しません。
というわけで、もちろん皆さんはこの書き方がコードを読みやすくするために有効であることは容易にご理解いただけると思います。しかし、これによって、さらに
expr1 && expr2 または expr1 || expr2 と記述すると、4D は両方の式を評価します。 truthyまたは falsy性を持つ。以下に列挙する値は、次のように見なされます。 falsy:
- false
- Null
- 未定義
- Null オブジェクト
- Null コレクション
- Null ポインタ
- Null 画像
- Null 日付
- “” – 空の文字列
- [] – 空のコレクション
- {} – 空のオブジェクト
それ以外の値は、truthy とみなされます。
||演算子は、1つ目の式が truthyである場合、最初の式を返し、そうでない場合、2 番目の式を返します。
演算子&&は、最初の式が falsyそうでなければ、2 番目の式を返します。
例えば、以下のコードはブール値を返さず、数値を返します。
$salary:= $employee.salary || $minSalary
$employeesalary が最初に評価されます。その結果が Null でない場合、それは truthyとみなされ、返されます。
$employee.salary がNull である場合、したがって falsyの場合、2番目の式($minSalary)が評価され、その結果が返されます。
複合代入演算子
複合代入演算子は、演算の書き方を簡略化したものです。
- 加算代入演算子(+=)は、右オペランドの値を変数に加算し、その結果を変数に代入します。
$a+=5
// equals to $a:=$a+5
- 減算代入演算子 (-=) は、変数から右オペランドの値を減算し、その結果を変数に代入します。
$s-=5
// equals to $s:=$s-5
- 除算演算子(/=)は、右オペランドの値で変数を割り算し、その結果を変数に代入します。
$d/=2
// equals to $d:=$d/2
- 乗算代入演算子(*=)は、変数と右オペランドの値を乗算し、その結果を変数に代入します。
$m*=5
// equals to $m:=$m*5
三項演算子
三項演算子は、条件とクエスチョンマーク( ? )、条件がtruthy の場合に評価する式とコロン( : )で構成されます。最後に、条件がfalsy であった場合に評価する式 :条件 ? 値 True の場合 : 値 False の場合
などと書けばよい。
$label:=($size>1000) ? "big" : "small"
Choose 三項演算子は、Choose が条件としてブール型のみを受け付けるのに対し、三項演算子はすべての型を受け付け、その falsyと truthyの状態になります。
より詳しい情報はこちらです。