Skip to content
Источник

Improving Legibility with the .not() Function

Классический просмотр AndroidWeekly в начале недели почти всегда кайф. Что может быть лучше, чем почитать какие-нибудь вредные советы. Особенно по кодстайлу. Это я люблю.

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

Первый – самый экстравагантный, про то, что можно переопределить оператор not() у любого класса. И для примера, говорит, можно писать user = !user вместо user.copy(isActive = false). Очень читаемо получилось, ага, очень понятно (нет). Впрочем, автор там оставил дисклеймер, что пример больше для демонстрации реализации, а не о том, где использовать. Но если не получается даже нормальный пример придумать, то может и фигня идея, нет?

Второй про то, что восклицательный знак слишком маленький и незаметный, его никто не видит. Поэтому нужно вместо !limitRequests писать limitRequests.not(). Этого я вообще не понимаю. Да, я согласен, что not больше бросается в глаза, чем восклицание, но это потому что обычно люди код так не пишут, вот взгляд и спотыкается. Об этом, кстати, не так давно Осип писал у себя в канале. И я тоже вообще не понимаю откуда это мода взялась, в какой-то момент этого стало прям много.

Я даже аргумент про нулабельные переменные не особо понимаю, который часто в таких обсуждениях приводят. Ну проверь ты на нулл просто раньше, зачем тебе в условии монстра типа limitRequests?.not() ?: false собирать.

Третий тейк про то, что можно поменять суть самой проверяемой переменной. То есть вместо !limitRequests использовать, например, allowRequests. Что в общем смысле то совет неплохой, но применим в гораздо меньшем количестве кейсов, чем кажется в таком синтетическом примере. Не будешь же ты какую-то очевидную переменную типа isLoading переименовывать, если она так у тебя по всему проекту называется. Тем более что ты в одном месте на true лоадер рисуешь, а в другом контент на false, например.

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