Компактная конвенция

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

Создание столько переменных, сколько необходимо:

var x = GmailApp.getInboxUnreadCount();
var email = GmailApp.getInboxThreads (0, x);

Составление кода в одну строку:

var email = GmailApp.getInboxThreads (0, GmailApp.getInboxUnreadCount());

2 ответа

Решение

Последнее в пределах разумного. Но это в значительной степени вопрос стиля в простых случаях.

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

"Эта строка кода читается с использованием меньшего количества локальных переменных? Или мне нужно разбить ее, чтобы лучше проиллюстрировать, что делает эта строка?" это вопрос, который вы должны задать себе. И в этом случае последнее полностью читабельно.


На самом деле, я бы сказал, что первый пример менее читабелен из-за бесполезного имени локальной переменной x, Если бы вместо этого были названы лучше, это может быть более жизнеспособным вариантом.

var unreadCount = GmailApp.getInboxUnreadCount();
var email = GmailApp.getInboxThreads (0, unreadCount);

Это лучше, но все еще довольно ненужно в этом очень простом случае.

Это компромисс.

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

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

В этом примере

1. var unread = GmailApp.getInboxUnreadCount();
2. var email = GmailApp.getInboxThreads (0, unread);

Скажем, вы получили ошибку в строке 2. Вы знаете, что getInboxThreads выдает ошибку.

1. var email = GmailApp.getInboxThreads (0, GmailApp.getInboxUnreadCount());

Теперь предположим, что вы получили ошибку в строке 1. Вам придется проверить оба метода.

Другие вопросы по тегам