変数 min_value, max_value が存在するとき、それぞれの条件で処理を変えたい
例えば…
min_value | max_value | 処理 |
---|---|---|
null | null | なにもしない |
null | not null | 上限より小さいことを検証 |
not null | null | 下限より大きいことを検証 |
not null | not null | 範囲内にあることを検証 |
普通はこんな感じ
Main.java
class Main {
public static void main(String[] args) {
}
private static String hoge(int value, Integer min_value, Integer max_value) {
if (min_value == null && max_value == null) {
// なにもしない
return "";
}
if (min_value == null) {
// 上限チェック
return "";
}
if (max_value == null) {
// 下限チェック
return "";
}
// 範囲チェック
return "";
}
}
- パッと見、分かりづらい
- 比較が一つの場合と、四つの場合が存在し、データによっては速度に違いが出る
- 見た目が悪い
これをなんとか解消したい…
main.swift
func hoge(_ value: Int, _ min_value: Int?, _ max_value: Int?) -> String {
// Optional が外れない
switch(min_value != nil, max_value != nil) {
case (true, true):
return "" // 範囲チェック
case (true, false):
return "" // 上限チェック
case (false, true):
return "" // 下限チェック
case (false, false):
return "" // 何もしない
}
}
Pytyon3 の場合
main.py
def hoge(value, min_value, max_value):
command = {
(True, True): lambda: "", # 範囲チェック
(True, False): lambda: "", # 下限チェック
(False, True): lambda: "", # 上限チェック
(False, False): lambda: "", # なにもしない
}
return command[(min_value is not None, max_value is not None)]()
もっと良い方法がありましたら、教えていただきたいです。