Russian Qt Forum
Май 06, 2024, 06:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 3 [4]   Вниз
  Печать  
Автор Тема: [флэйм] if(expr) return 1; else return 0;  (Прочитано 34359 раз)
Rcus
Гость
« Ответ #45 : Февраль 16, 2009, 13:44 »

Код
C++ (Qt)
QCursor result;
if (testAttribute(Qt::WA_SetCursor)) {
   if (d->extra && d->extra->curs) {
       result = *d->extra->curs;
   } else {
       resut = QCursor(Qt::ArrowCursor);
   }
} else if (isWindow() || !parentWidget()) {
   result = QCursor(Qt::ArrowCursor);
} else {
   result = parentWidget()->cursor();
}
return result;
что-то забыл... ах да, MUAHAHAHAHA!!!!111 i'm so evil /*для тех кто не догоняет, посчитайте количество фигурных скобок*/
« Последнее редактирование: Февраль 16, 2009, 13:59 от Rcus » Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #46 : Февраль 16, 2009, 13:55 »

Во! Так гораздо лучше читается и понятнее и сразу все видно!
Записан

ArchLinux x86_64 / Win10 64 bit
Tonal
Гость
« Ответ #47 : Февраль 16, 2009, 14:12 »

С моей точке зрения, всё зависит от пишущего/читающего.
Если кто-то воспринимает if-else как неделимую конструкцию, то понятно, что он будет писать
Код
C++ (Qt)
if (expr) {
 ret = true_ret;
} else {
 ret = false_ret;
}
return ret;
 
И ему всегда приходится анализировать всю конструкцию.
С другой стороны, в этом случае конструкция if-else упрощается - остаётся 1 вариант из 2х

Но вот то, что при этом код упрощается - не факт.
У того же Маркконнелла в главе про множественные return-ы напрямую советуется синтаксис
Код
C++ (Qt)
if (expr)
 return true_ret;
return false_ret;
 
Т.е. выйти из функции как можно быстрее.
Тут мы ещё и бонус получаем - использованные в функции ресурсы освобождаются наиболее быстро, или вообще не захватываются (RAII).

Возвратить напрямую результат вычисления предиката тоже вполне здравая мысль: зачем городить какие-то промежуточные переменные и конструкции, если всё, что нужно это значение выражения?
То же и с тернарным оператором. Улыбающийся

Короче в итоге, ежели предполагаешь, что читатели будут с плохим знанием синтаксиса конкретного языка - то нужно употреблять конструкции к которым оные читатели привыкли.
Ну а ежели таки предполагается, что читатели будут нормально знакомы с языком, то вполне допустимо использовать его возможности - это ускоряет восприятие кода. Улыбающийся
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #48 : Февраль 16, 2009, 15:18 »

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

+1
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #49 : Февраль 16, 2009, 23:10 »

Код
C++ (Qt)
QCursor result;
if (testAttribute(Qt::WA_SetCursor)) {
   if (d->extra && d->extra->curs) {
       result = *d->extra->curs;
   } else {
       resut = QCursor(Qt::ArrowCursor);
   }
} else if (isWindow() || !parentWidget()) {
   result = QCursor(Qt::ArrowCursor);
} else {
   result = parentWidget()->cursor();
}
return result;
что-то забыл... ах да, MUAHAHAHAHA!!!!111 i'm so evil /*для тех кто не догоняет, посчитайте количество фигурных скобок*/

Плюс 1! Так гораздо лучше, чем то, что в исходниках Qt.

Хотя, можно былоб отформатировать так

Код
C++ (Qt)
QCursor result;
 
if (testAttribute(Qt::WA_SetCursor)) {
 
if (d->extra && d->extra->curs)
 result = *d->extra->curs;
else
 resut = QCursor(Qt::ArrowCursor);
 
}
else {
 
if (isWindow() || !parentWidget())
 result = QCursor(Qt::ArrowCursor);
else
 result = parentWidget()->cursor();
 
}
 
return result;

Записан

Собираю информацию по крупицам
http://webhamster.ru
Rcus
Гость
« Ответ #50 : Февраль 17, 2009, 06:12 »

Плюс 1! Так гораздо лучше, чем то, что в исходниках Qt.
Ну что вы, я так старался изуродовать код, что решил лучшим способ будет написать его в дельфинном стиле Улыбающийся А вот если применить два рефакторинга: защитные проверки (guardian clause) и удаление временной переменной то получим в точности оригинальный код Улыбающийся))
« Последнее редактирование: Февраль 17, 2009, 07:33 от Rcus » Записан
ритт
Гость
« Ответ #51 : Февраль 17, 2009, 07:29 »

гг...Rcus спалил xintrea Улыбающийся
а я уже и забыл каким стилем оформлял код, когда работал с багландом...
Записан
ритт
Гость
« Ответ #52 : Февраль 17, 2009, 07:47 »

ой, что сейчас нашёл!..
вкратце примерно вот так:
Код:
int linew(int w)
{
  switch(w) {
  case 0:
  case 1: return 0;
  case 2: return 1;
  default: return 3;
  }
}
и ведь по смыслу всё правильно - не придерёшься! Улыбающийся
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #53 : Февраль 17, 2009, 08:29 »

Цитировать
и ведь по смыслу всё правильно - не придерёшься!
и? в чем подвох?
Записан

ArchLinux x86_64 / Win10 64 bit
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #54 : Февраль 17, 2009, 12:22 »

Ну что вы, я так старался изуродовать код, что решил лучшим способ будет написать его в дельфинном стиле Улыбающийся

Тогда можно сделать "лучше" Подмигивающий

Код
C++ (Qt)
#define begin {
#define end }
 
if (<condition>)
begin
   ....
end
   else
   begin
       ...
   end
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Rcus
Гость
« Ответ #55 : Февраль 17, 2009, 12:40 »

не хватает #define then для полного счастья /*sigh*/
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #56 : Февраль 17, 2009, 12:45 »

не хватает #define then для полного счастья /*sigh*/

Ах да! забыл Улыбающийся
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: 1 2 3 [4]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.153 секунд. Запросов: 22.