2

私の Android アプリには、動的に設定されたフォント サイズを受け取り、それに比例して小さいフォント サイズを返すメソッドがあります。getTextSize() から取得する値は見出し用で、小さい方の値は本文用です。現在、次のように書かれています。

public int getSmallerTextSize(){
    int textSize = (int)Math.round(getTextSize() * 0.8);

    if(textSize > 20){
        textSize = 20;
    }else if(textSize < 10){
        textSize = 10;
    }

    return textSize;
}

これを表現するための、より短くてぎこちない方法を見つけたいと思います。1 つのオプションは次のとおりです。

public int getSmallerTextSize(){
    int textSize = (int)Math.round(getTextSize() * 0.8);

    textSize = textSize > 10 ? textSize : 10;
    textSize = textSize > 20 ? 20 : textSize;

    return textSize;
}

しかし、繰り返しになりますが、非常に単純なものに大量のコードが必要です。誰かがこれを表現するために、エレガントでできればワンライナーのコードを提案できますか?

4

4 に答える 4

10

次の式を使用してください。

textSize = Math.min(Math.max(textSize,10),20);
于 2012-12-02T00:46:20.417 に答える
4

limitRangeヘルパー メソッドを作成できます。

public static int limitRange(int i, int min, int max) {
    if (i > max) {
        i = max;
    } else if (i < min) {
        i = min;
    }
    return i;
}

次に、int の範囲を制限する必要があるときはいつでもワンライナーとして使用します。

public int getSmallerTextSize(){
    int textSize = (int)Math.round(getTextSize() * 0.8);
    textSize = limitRange(textSize, 10, 20);
    return textSize;
}
于 2012-12-02T00:35:03.850 に答える
3

私は明示的なreturnsを好みelse、不要な場合は節を避けます。

public int getSmallerTextSize() {
    int textSize = (int) Math.round(getTextSize() * 0.8);
    if (textSize < 10) {
        return 10;
    }
    if (textSize > 20) {
        return 20;
    }
    return textSize;
}

limitRange他のメソッドが同じロジックを使用している場合にのみ、メソッドを抽出します。また、範囲制限の値を保持する定数をいくつか追加するとよいでしょう。

于 2012-12-02T00:39:54.070 に答える
2

コード (単一行コード) の行数を減らしたい場合は、以下のように両方の三項演算を 1 行にマージしてみてください。

  int textSize = (int)Math.round(getTextSize() * 0.8);
  textSize = textSize>20 ?20:textSize<10 ?10: textSize ;
于 2012-12-02T00:38:06.970 に答える