Где перенести строку кода, особенно длинные списки аргументов? [закрытый]

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

24
задан Community 23 May 2017 в 12:32
поделиться

12 ответов

int SomeReturnValue = SomeMethodWithLotsOfArguments
(   Argument1,
    Argument2,
    Argument3,
    Argument4
);
14
ответ дан kenny 28 November 2019 в 23:25
поделиться

Опция 3 предложила

int SomeReturnValue = SomeMethodWithLotsOfArguments(
    Argument1,
    Argument2,
    Argument3,
    Argument4
);

, лучший путь, поскольку она дает хорошее чувство. Если длины аргументов - более или менее то же, то мы можем соединить их так, чтобы они выстроились в линию как таблица, например

int SomeReturnValue = SomeMethodWithLotsOfArguments(
    Argument1,    Argument2,    Argument3,    Argument4,
    Argument005,  Argument006,  Argument7,    Argument8
);
11
ответ дан PhiLho 28 November 2019 в 23:25
поделиться

Я предпочитаю этот путь:

int SomeReturnValue = SomeMethodWithLotsOfArguments(Argument1, Argument2, 
                        Argument3, Argument4);

, Где концы строки, самые близкие к Вашей текущей макс. ширине строки (независимо от того, что это) и следующей строке, располагается Ваш обычный уровень отступа с отступом (независимо от того, что это) относительно, равняется знаку.

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

Один пример этого был бы то, если бы функция потребовала многих аргументов или argiments, где самих комплекс, тогда я мог бы, выбрал что-то вроде этого вместо этого:

int SomeReturnValue = SomeMethodWithLotsOfArguments(
                        Argument1 + Expression1 + Expression2, 
                        Argument2 - Expression3 * Expression4, 
                        Argument3, 
                        Argument4 * Expression5 + Expression6 - Expression7);

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

7
ответ дан Anders Sandvig 28 November 2019 в 23:25
поделиться

Я пытаюсь сохранить строки короткими. В этом случае я повредился бы перед присвоением и после каждого параметра. Я также поместил запятую в начале строки, чтобы облегчить добавлять новые аргументы:

int SomeReturnValue 
   = SomeMethodWithLotsOfArguments(
         Argument1
       , Argument2
       , Argument3
       , Argument4
    );

Используя этот вид расположения большая работа в Visual Studio, но Emacs делает его автоматическим для меня.

6
ответ дан Martin Cote 28 November 2019 в 23:25
поделиться

Для меня это зависит от, какой длины список аргументов. Мне не нравится конец расположения строки очень, и это почти требует для поддержки редактора (например, emacs), чтобы сделать это хорошо.

, Если вызов метода достаточно короток для получения его на одной строке, я сделаю это:

int SomeReturnValue =
    SomeMethodWithLotsOfArguments(Argument1, Argument2, ...);

, Если метод и переменное соответствие на одной строке и аргументы на другом, я сделал это:

int SomeReturnValue = SomeMethodWithLotsOfArguments
    (Argument1, Argument2, ... );

, Который делает мою сердечную улыбку LISPy, но сводит моих коллег с ума, таким образом, я смягчился:

int SomeReturnValue = SomeMethodWithLotsOfArguments(
    Argument1, Argument2, ... );

я предполагаю, что просто пытаюсь сказать, что я не нашел решение, которым я действительно доволен, хотя это имеет некоторый призыв к действительно слишком долгим случаям из-за его подобия тому, как мы размечаем кюри:

int SomeReturnValue = SomeMethodWithLotsOfArguments(
    Argument1, 
    Argument2,
);
1
ответ дан bendin 28 November 2019 в 23:25
поделиться

Лично, мне не нравится вторая опция, слишком близко искусства ASCII, с его неудобствами в коде: измените имя функции, необходимо повторно расположить все аргументы с отступом. И так или иначе это чрезмерно увеличивает размер файла. Плюс он не делает работы хорошо, если Вы используете твердые вкладки в коде.

Большую часть времени, я использую право преимущественной покупки, но я принял правило Eclipse двух отступов для строк продолжения, как есть лучше от нормального добавления отступа (особенно, если Вы разделяете условные инструкции).

Когда-то я использую вторую опцию, например, если вводная круглая скобка уже является близостью моего предела длины строки...
Преимущество: можно добавить комментарий строки после каждого параметра.
Или мне действительно нравится Dheer, группируя аргументы, пока они не заполняют ширину строки.

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

1
ответ дан PhiLho 28 November 2019 в 23:25
поделиться

предупреждение: Я использую IDE. Если Вы не пользователь IDE, просто пропустите это.

При работе с другими:

я склонен придерживаться любого соглашения, в настоящее время принимается командой. Еще лучше, если команда использует IDE с поддержкой формата кода. Всегда засовывайте w/соглашения формата команды/IDE. Не может сказать Вам, сколько раз я был записан "version-contro-diff-hell-due-to-reformats"

При работе один:

я представляю метод в виде строки на, длина строки не является проблемой для меня. У меня есть хороший широкоэкранный монитор, и горизонтальные полосы прокрутки были изобретены по причине. Вдобавок ко всему, навигация по исходному коду намного больше, чем визуально прокручивает теперь, когда много IDE имеют утилиты как деревья вызова, найдите ссылки и инструменты рефакторинга.

1
ответ дан basszero 28 November 2019 в 23:25
поделиться

Нет никакого категорического ответа для меня на этом. Я делаю это на индивидуальной основе. Если имя функции длинно, я определенно не располагаю другие аргументы с отступом тому же столбцу как предыдущие аргументы. Если имя функции коротко, я обычно отступ после аргументов тому же столбцу, собираясь как много аргументов, я могу на одной строке (не один аргумент = одна строка). Но если бы существует некоторая приятная симметрия, как в

int a = foo(a + b,
            c + d);

я, вероятно, нарушил бы то правило и имел бы то же количество аргументов на каждой строке.

1
ответ дан Johannes Schaub - litb 28 November 2019 в 23:25
поделиться

Я всегда повреждаюсь перед присвоением, если это оставляет righthandside неповрежденным. Это - usful на языках как Java, где Вы имеете к explictly, объявляют тип значения, которое это присвоено.

SomeVeryVerboseTypeName SomeReturnValue
   = SomeMethodWithLotsOfArguments(Argument1, Argument2, ...);
1
ответ дан Inshallah 28 November 2019 в 23:25
поделиться

Большинство сделало большие предложения о расположении с отступом и здорово для API-функций, которыми Вы не управляете. Если бы Вы действительно управляете API, я предложил бы, чтобы однажды Вы ahve больше чем 3 аргумента Вы создали некоторую форму структуры и передать структуру стандартной программе. Как только Вы добираетесь выше 3 аргументов, шанс передачи их в неправильном порядке идет путем, путь. Это также дает больше видимости типу и значению параметров.

someStruct.x = somevalue;
somestruct.y = someothervalue;

int someResturnValue - SomeMethod(somestruct);
1
ответ дан MikeJ 28 November 2019 в 23:25
поделиться

В функциях с длинным списком параметров я переношусь после каждого или двух параметров для удобочитаемости (всегда сохраняющий то же количество параметров на каждой строке):

int SomeReturnValue = SomeMethodWithLotsOfArguments(Argument1,
                                                       Argument2,
                                                       Argument3,
                                                       Argument4);

ИЛИ

int SomeReturnValue = SomeMethodWithLotsOfArguments(Argument1, Argument2,
                                                       Argument3, Argument4);

в зависимости от длины списка/параметра.

0
ответ дан Galwegian 28 November 2019 в 23:25
поделиться

Я также использую ‘consistent, делающий отступ option’, как заключено в кавычки Edward Kmett. Если существует партия из аргументов, я ухаживаю группе строки за ними связанностью, если это возможно.

, Но для этого конкретного примера я, вероятно, оставил бы его на одной строке, это не это долго.

я не могу выдержать ‘dangling wrap’ формат, поскольку это может легко предоставить визуальному беспорядку, конфликтующему (намного более важное) расположение с отступом. Повисшие обертки считают стилем ‘default’ для многих языков в данный момент, но я не знаю, как это получило тот путь. Это, по моему скромному мнению, ужасно.

0
ответ дан bobince 28 November 2019 в 23:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: