2017-07-19 9 views
0

まずは悪いタイトルで申し訳ありませんが、何が適切かはわかりませんでした。私は自分自身を繰り返さないように、次のブロックのより良い構文を探しています。 self.rulerMajorTickLabelとself.rulerMinorTickLabelがself.rulerMajorTickWidthとself.rulerMinorTickWidthだけelif elseを構築してDRYを完全に実行した場合

if self.rulerMajorTickLabel and self.rulerMinorTickLabel: 
    if self.rulerMajorTickWidth > self.rulerMinorTickWidth: 
     halfTickHeight = self.rulerMajorTickWidth/2 
    else: 
     halfTickHeight = self.rulerMinorTickWidth/2 
elif self.rulerMajorTickLabel: 
    halfTickHeight = self.rulerMajorTickWidth/2 
elif self.rulerMinorTickLabel: 
    halfTickHeight = self.rulerMinorTickWidth/2 
else: 
    halfTickHeight = 0 

正フロートすることができ

  • TrueまたはFalseのいずれかであることができる

    • おかげで、あなたは非常に!

    +0

    前からすべてのif...elif...elseの句に相当します
    tmpMajor = self.rulerMajorTickWidth if self.rulerMajorTickLabel else 0 tmpMinor = self.rulerMinorTickWidth if self.rulerMinorTickLabel else 0 halfTickHeight = max(tmpMajor, tmpMinor)/2 

    。メジャーとマイナーなアイデアをいくつかの方法に分解し、そこから行く方法を検討することから始めたいと思います。 –

    +0

    また、「真」でない潜在的な値は何ですか?値は 'None'ですか?彼らは属性として未定義ですか?彼らは「偽」になれますか?それとも単に「0」ですか? –

    +0

    self.rulerMajorTickLabelとself.rulerMinorTickLabelは、TrueまたはFalseのいずれかです。self.rulerMajorTickWidthおよびself.rulerMinorTickWidthは、正の浮動小数点のみにすることができます。混乱のために申し訳ありません – doom4

    答えて

    0

    ここでは、エレガントに機能させるためにいくつかのことを想定しているので、コードのどこか他の部分を確認したいと思うかもしれません。私の仮定:

    • self.rulerMajorTickWidthself.rulerMinorTickWidth
    • あなたはちょうど大きな欲しい正の数、またはゼロ
    • 彼らは両方の属性として定義され、それらを探していてもエラーがスローされませんと同じですか、 2は、すべてのことを仮定すると、2

    によって分割する、あなたは、単に行うことができます。

    halfTickHeight = max(self.rulerMajorTickWidth, self.rulerMinorTickWidth)/2 
    

    ただし、 "false"の値がNoneまたはundefinedの場合は、より複雑です。だからこそ私は、コード内の他の場所に、0か整数かfloatかを確認することを提案しています。彼らは実際にブールFalseている場合は、0

    編集を等しくするためにそれらをfloat()することができます:私はちょうどラベルは幅部分よりも異なっている気づいているので、あなたはまだこれを行うことによって、より簡単にチェックのすべてをプリフォームすることができます

    これは非常に一般的な問題であり、私たちはあなたがDRY原則に準拠を支援するために十分な情報がここに実際にそこではありません
    +0

    ありがとうコメント – doom4

    関連する問題