1. Java / Говнокод #5340

    +90

    1. 1
    2. 2
    if (name != null ? !name.equals(module.name) : module.name != null) return false;
    return true;

    Запостил: Jk, 20 Января 2011

    Комментарии (36) RSS

    • return name!=null && name.equals(module.name);
      Ответить
      • Нет.
        Ответить
        • мне не нравится идея возвращать тру если module.name == null :)
          Ответить
          • Нравится или не нравится -- это личные проблемы. А надо делать правильно.
            Ответить
        • module.name == null || name!=null && name.equals(module.name);
          Ответить
          • Нет.

            Как ни крути, а нужны либо тернарный оператор, либо вспомогательная переменная, либо четыре сравнения.
            Ответить
    • Понравилось вложение тернарного оператора в if.
      return !(name != null ? !name.equals(module.name) : module.name != null);
      Ответить
    • Исправил пока так:
      return (name != null) ? name.equals(useCase.name) : useCase.name == null;
      Ответить
    • return name != null && name.equals(useCase.name) || useCase.name == null
      Ответить
      • Вот так пойдёт. Хотя и менее эффективнее, чем с условным оператором.
        Ответить
      • вариация на эту же тему

        return name == useCase.name || name != null && name.equals(useCase.name)
        Ответить
        • name == useCase.name не годится так как он сравнивает ссылки и для корректного сравнения подобным образом они должны быть константами из пула, к тому же если он name будет null'ом то вылезет ecxeption, в моем варианте его не не будет из-за ленивых вычислений
          Ответить
          • Годится, это покроет случай, когда оба равны и когда оба случайно указывают на один объект. С остальным справится то, что после ||.

            Кстати, в некоторых случаях это может оказаться даже эффективнее. Только мозги некоторым свернёт.
            Ответить
          • а как name == useCase.name может кинуть ecxeption???
            Ответить
        • Хорошо завёрнуто.
          Ответить
        • А в джаве разве нельзя для пустой строки применить equals?
          А то получается обёртка над обёрткой, которая вызывает обёртку, сравнивающую именно непустые строки.
          Ответить
          • >обёртка над обёрткой, которая вызывает обёртку
            Что Вам не нравится? Если это всё превратится в один вызов, то какие проблемы? Главное код, что-б был красивый.
            Ответить
    • можно еще так:

      if (name == null) {
      return useCase.name == null;
      }
      return name.equals(useCase.name);

      Но, похоже, доходчивее этот код уже не сделаешь
      Ответить

    Добавить комментарий