私は次のようなコードを見てきました:
nodeIds = Framework.getDataAsList(key) or []
それが変換するコードの完全な断片は何でしょうか?関数の出力は結果についてチェックされていますか、False
それともNone
結果についてチェックされていますか?これに似たJava構文はありますか?
or
短絡。左側の式が「True」である場合はそれに評価され、そうでない場合は右側の式に評価されます(「False」であっても)
左側の式が「True」の場合、右側の式は評価されません。副作用がある場合、これは重要です
「真」はbool(expression) == True
「偽」が意味することを意味しますbool(expression) == False
擬似コードがあります:
def nonZero(var):
if isinstance(var,collection):
if len(collection) == 0 : return False
else: return True
if isinstance(var, number):
if number == 0 : return False
else: return True
if isinstance(var, boolean): return var
if isinstance(var, NoneType): return False
if hasattr(var,'__nonzero__'): return var.__nonzero__()
nodeIds = Framework.getDataAsList(key)
if not nonZero(nodeIds) : nodeIds = []
より長いバージョン(Python)は次のようになります:
nodeIds = Framework.getDataAsList(key)
if not nodeIds:
nodeIds = []
これはほぼ同じようにJavaに変換される可能性があります。
Vector<foo> nodeIds = Framework.getDataAsList(key);
if(nodeIds == null) {
nodeIds = new Vector<foo>();
}
(私のJavaはかなり錆びています;)
'not'式の特定の値はFalseと評価されます。これは、インタラクティブなPythonコマンドラインから自分で試すことができます。
>>> not 0
... True
>>> not 1
... False
>>> not []
... True
>>> not ()
... True
>>> not True
... False
>>> not False
... True
お役に立てれば。
Framework.getDataAsList(key)
後続の呼び出しで同じ結果が返されると仮定すると、次のようになります。
nodeIds = Framework.getDataAsList(key) if Framework.getDataAsList(key) else []
と:
if Framework.getDataAsList(key):
nodeIds = Framework.getDataAsList(key)
else:
nodeIds = []
ただし、これらの例は両方とも、Framework.getDataAsList(key)
1回ではなく2回の呼び出しが必要であることに注意してください。したがって、おそらくもっと正確に:
nodeIds = Framework.getDataAsList(key)
if not nodeIds:
nodeIds = []
>>> 0 or "yes"
'yes'
>>> None or "yes"
'yes'
>>> False or "yes"
'yes'
>>> [] or "yes"
'yes'
>>> "no" or "yes"
'no'
したがって、関数がそうでない値を返す場合は__nonzero__()
、空のリストが割り当てられます。ブール演算子との短絡動作に関する公式チュートリアルのこの部分も参照してください。Pythonでのオブジェクトの真理値テストの詳細については、この回答も参照してください。and
or
注:Python 3.0以降__bool__()
、テストされています。
Javaの場合、これはおそらく三項演算子を使用して変換できます。
result = Framework.getDataAsList(key);
nodeIds = result ? result : someEmptyList();
がチェックされFalse
ます。したがって、、、、、、、またはと 評価されるその他の値を返す場合Framework.getDataAsList(key)
は、に[]
割り当て{}
られます。0
""
()
None
False
[]
nodeIDs
このPythonイディオムは一般的であり、他のC言語のような言語の三項演算子のように割り当てで使用されます。
# python
var = value or fallback
と同等です:
/* c-like */
var = value ? value : fallback
どちらも次の擬似コードと同等です。
if value is true:
var = value
else:
var = fallback