Groovy: java слишком проста

Возьмём довольно частую задачку: есть несколько значений первой переменной, нужно сделать присвоить второй переменной какое-то значение, в зависимости от первой переменной, т.е. value mapping.

В джаве это делается примерно так:

String alertClass = "";
switch(code.toUpperCase().charAt(0)) {
case 'U':
    alertClass = "alert";
    break;
case 'P':
    alertClass = "alert-error";
    break;
case 'B':
    alertClass = "alert-warning";
    break;
case 'C':
    alertClass = "alert-info";
    break;
}
// now alertClass has value

А теперь в groovy с помощью анонимного замыкания:

def alertClass = { code ->
    switch(code[0]?.toUpperCase()) {
    case 'U': return 'alert'
    case 'P': return 'alert-error'
    case 'B': return 'alert-warning'
    case 'C': return 'alert-info'
    }
}(trouble.getCode())

По сути – тот же switch, но без синтаксического шума. И так во всём. Особенно при работе с коллекциями, анонимными классами, null-safe операциями.

Именно поэтому простота java раздражает на столько, что кидаюсь на всякие kotlin, scala, etc..

  • Если значений немного, можно создать ImmutableMap.Builder из Guava, у него есть компактные версии конструкторов.

    • ruX

      Мэпа по определению всегда медленнее работает, но тут это не важно. У груви тоже легко создаются мэпы ;)

      Guava прекрасна, но её нужно с собой тащить, пока не было жесткой необходимости её подключать