Перейти к контенту

Редактирование движка X-Ray


Rolan

Рекомендуемые сообщения

@Andrey07071977, @Max Warlock@power-cat, считайте, что я ничего на этот раз не видел. Предупреждение первое и последнее.
Все посты с междусобойчиком (в том числе ответами) - в топку.

Поделиться этим сообщением


Ссылка на сообщение

@*Shoker*@svarog2741,

Меня немного смущает другое. Вы пишете, например, так:

if (!GameID() == eGameIDSingle || OnClient()) 
Зачем такие сложности? Не проще ли вместо инвертирования первого из аргументов сравнения проверить их на «не равно»? Вот так:

if (GameID() != eGameIDSingle || OnClient()) 
Или цель уменьшить читабельность кода? :)

 

 

И да, не сваливаемся в личную переписку!

  • Нравится 2

Поделиться этим сообщением


Ссылка на сообщение

Ещё немного оффтопа, но написать его должен, иначе вы такого в движке наворотите, коллеги, что мама не горюй.

Мой первоначальный вопрос:

 

if (!GameID() == eGameIDSingle || OnClient())
Зачем такие сложности? Не проще ли вместо инвертирования первого из аргументов сравнения проверить их на «не равно»? Вот так:

if (GameID() != eGameIDSingle || OnClient())
Или цель уменьшить читабельность кода? :)

 

Ответ:

Тут скорее кто как привык, тот так и делает.

Так вот, это крайне порочная практика.

Во-первых, читабельность кода - не пустой звук. Ладно, если пишете исключительно для себя, там хоть сотней последовательных «if» условия пишите (видел я где-то тут на днях подобный «шедевр») - только вам с этим кодом потом и разбираться. А если потом потребуется чья-то помощь? А если - не дай Бог - разрабатываете или будете дорабатывать в команде? Будете менять «привычки» в зависимости от обстоятельств?

А во-вторых, давайте посмотрим на выражение, за которое я зацепился.

if (!GameID() == eGameIDSingle || OnClient())
Логический оператор «!» - это отрицание, инвертирование, которое может применяться к логическим выражениям и булевым переменным, имеющим только два возможных состояния, true или false, ложь или истина. Хорошо, что тут, по всей видимости (сам в движке не ковырялся), функция GameID() возвращает именно булевый результат, поэтому ошибку вы не получаете.

Но что будет, если в аналогичной ситуации один из сравниваемых аргументов будет представлять собой, скажем, число или строку? Число тоже попытаетесь инвертировать «как привыкли»? И что в таком случае будет результатом? Вопрос риторический.

И я уж не говорю о более сложных случаях.

Стоит научиться писать код правильно, а не «как привыкли». Хотя бы не для себя, а ради тех, кто потом пойдёт по вашим стопам.

 

  • Спасибо 2
  • Полезно 2

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...