Именование нулевых параметров - PullRequest
1 голос
/ 19 января 2020

В коде, который я нашел:

String age = null;
String place = null;
new Employee(firstParam, secondParam, null, null, age, place);

Класс Employee не является нашим классом, вероятно, сгенерирован из файла wsdl, где параметры (возраст и место) называются alter, platz, поэтому кто-то пытался назвать нулевые параметры, чтобы знать, что, но это хорошая практика? Другая проблема заключается в том, что age и place переводятся, в то время как другие два параметра просто null, но помимо этого создает переменную со значением null, просто чтобы передать ее в следующую строку в конструктор, окей?

Ответы [ 3 ]

2 голосов
/ 19 января 2020

По моему опыту, когда у меня есть предварительно сгенерированные определения классов, которые выставляют контракты, которые не соответствуют моим потребностям, я склонен абстрагировать их за фабричным методом (может быть, не от полноценного компоновщика, но зависит ...) и выставить перегруженный контракты, которые помогают пользователям API просто передавать те аргументы, которые действительно необходимы. Что касается того, считается ли присвоение переменных значениям null хорошей практикой или нет, я думаю, что это более субъективно, чем ваш выбор, а не установленный шаблон. Но IMO, просто передать null будет чище, чем написать несколько дополнительных строк только для передачи аргументов метода.

1 голос
/ 19 января 2020

Нет четкого «да» или «нет» на этом шаблоне. Он действительно широко используется в некоторых областях.

Он имеет очевидное преимущество, заключающееся в том, что он вводит наименование и тем самым облегчает чтение и поддержку вашего кода, что всегда хорошо, а также снижает вероятность ошибок.

Но это также имеет недостатки. Самое большое, вероятно, то, что для читателя цель переменной может быть не совсем понятна. Окунитесь в мысль, что это может быть использовано позже, загрязняя тем самым вашу переменную область. Также может быть не очень удобно, если вы используете этот шаблон все время.

Не вдаваясь в подробности, есть и другие решения:

  • Большинство IDE имеют функция с именем параметра-подсказки
  • Некоторые языки, такие как Kotlin, имеют именованные параметры
  • Шаблон компоновщика для вызова метода привел бы к явному именованию
  • Перепроектируйте метод так, чтобы не разрешать необязательные нулевые параметры (некоторые считают необязательные параметры плохой практикой)
  • Избавьтесь от необязательных параметров, перегружая ваш метод

Кроме этого, вопрос, вероятно, слишком мнение на основе StackOverflow, особенно если учесть, что в сообществе нет единого мнения по этому шаблону.

0 голосов
/ 19 января 2020

Нет, делать что-то подобное не очень хорошая практика. В любом случае, когда вы объявляете некоторые поля, подобные этому String age;, возраст по умолчанию будет нулевым. Вместо этого я бы посоветовал взглянуть на некоторые обобщенные c шаблоны построителей (посмотрите ответ @SpaceTrucker, пожалуйста) вместо создания экземпляров конструкторами с более чем 2 параметрами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...