Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / "Стиль" кодирования - как правильно? / 25 сообщений из 37, страница 1 из 2
28.02.2010, 15:22:10
    #36493326
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
Псевдокод:
1.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
function func(param) {
	if (condition) {
		result_inner = dosmth();
		if (condition_over_result_inner) {
			result_inner2 = dosmth2();
			if (condition_over_result_inner2) {
				result = true;
			} else {
				result = false;
			}
		} else {
			result = false;
		}
	} else {
		result = false;
	}
	return result;
}
2.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
function func(param) {
	result = true;
	if (!condition) {
		result = false;
	}
	if (result) {
		result_inner = dosmth();
		if (!condition_over_result_inner) {
			result = false;
		}
	}
	if (result) {
		result_inner2 = dosmth2();
		if (!condition_over_result_inner2) {
			result = false;
		}
	}
	return result;
}
3.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
function func(param) {
	if (!condition) {
		return false;
	}
	result_inner = dosmth();
	if (!condition_over_result_inner) {
		return false;
	}
	result_inner2 = dosmth2();
	if (!condition_over_result_inner2) {
		return false;
	}
	return true;
}

Как правильнее? Почему?
...
Рейтинг: 0 / 0
28.02.2010, 15:30:23
    #36493334
Mozok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
an0nym,

Код: plaintext
1.
2.
function func(param) {
return (condition && dosmth() && dosmth2());
}
...
Рейтинг: 0 / 0
28.02.2010, 15:39:06
    #36493343
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
Mozok,

во-первых,
Код: plaintext
1.
2.
function func(param) {
  return (condition && condition_over_result_inner && condition_over_result_inner2);
}
,

во-вторых, если condition_over_result_inner - не односложное условие, состоящее, например, из (result_inner < 0 or result_inner > 5), а dosmth() - ресурсоемкая функция, то в вашем примере получится напрасная трата ресурсов
Код: plaintext
1.
2.
function func(param) {
  return (condition && (dosmth() <  0  or dosmth() >  5 ) && condition_over_result_inner2);
}
из-за двух вызовов оной. Чем дальше - тем больше будет тратиться лишних ресурсов.

Я думаю я достаточно четко описал в примерах, чтобы понимать о чем я спрашиваю. Если информации недостаточно - скажите, добавлю.
...
Рейтинг: 0 / 0
28.02.2010, 16:58:19
    #36493420
Mozok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
an0nym,

да ладно вам, уже и пошутить нельзя :).
Вообще, в данном случае выбор за вами. Сам предпочитаю вариант 3.
Почему? Потому что он наглядно демонстрирует модульность метода, видно все этапы алгоритма.
Мой бывший начальник предпочитал вариант 2, не любил много return'ов.
...
Рейтинг: 0 / 0
28.02.2010, 17:24:06
    #36493437
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
Mozok,

раньше сам использовал 3ий вариант. Потом что-то где-то прочитал и стал предпочитать 1ый вариант. Вот теперь не могу найти, почему я это сделал. :) 2 вариант плох лишними проверками на каждом блоке кода, но зато код куда удобнее читать, чем портянку
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
if {
  if {
    if {
      if {
        ...
      }
    }
  }
}

Вот интересно людей послушать, кто как делает и почему?
...
Рейтинг: 0 / 0
28.02.2010, 19:00:23
    #36493503
mccc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
табличный метод самый лучший, но корпеть придется
...
Рейтинг: 0 / 0
28.02.2010, 20:14:59
    #36493565
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
mccc,

табличный - это первый? можете вкратце объяснить, почему?
...
Рейтинг: 0 / 0
28.02.2010, 20:22:38
    #36493574
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
Детский вопрос. Тем не менее.

Вариант 3 неудобен в случаях, когда требуется ручная очистка (удалить память, закрыть файл).

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

В 3х - пофигу, лишь бы было читаемо и одинаково (почти) по всей программе.

В 4х - неплохо почитать чужой код (библиотеки там, еще чего н. большое).
...
Рейтинг: 0 / 0
28.02.2010, 20:53:14
    #36493600
Mozok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
Siemargl
Вариант 3 неудобен в случаях, когда требуется ручная очистка (удалить память, закрыть файл).

Ага. Поэтому на восьмой день, хорошенько отдохнув, Бог создал RAII :).
...
Рейтинг: 0 / 0
28.02.2010, 21:25:47
    #36493623
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
Mozok, зависит от языка.

Можем на досуге подискутировать на тему автоуничтожения, например в деструкторах, а особенно gargage коллектором взаимозависимых объектов. Или, например, циклически зависимых.
...
Рейтинг: 0 / 0
28.02.2010, 21:45:53
    #36493643
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
an0nym,

Мне 3-й нравится - читабельный и букаф немного. Сам именно в таком стиле делаю.
...
Рейтинг: 0 / 0
28.02.2010, 23:02:11
    #36493693
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
Для чистоты обсуждения примем за истину то, что во всех подходах ресурсы будут правильно освобождены и само исполнение полностью эквивалентно по результату.

Есть ли фундаментальная разница в оптимизации подобных конструкций интерпретатором (PHP и др.) или компилятором (C++, C#, Java и др.), в зависимости от используемого "стиля" 1/2/3?
...
Рейтинг: 0 / 0
01.03.2010, 03:05:34
    #36493751
avb1003
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
an0nym
...
Как правильнее? Почему?Иногда даже так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
function func(param) {
	if (!condition) {
		goto  fail;
	}
	result_inner = dosmth();
	if (!condition_over_result_inner) {
		goto fail;
	}
	result_inner2 = dosmth2();
	if (!condition_over_result_inner2) {
		goto fail;
	}
	return true;
fail:
// Mожет быть освобождение ресурсов и/или запись в лог файл
        return false;
}
Эта форма бывает удобна в частности при отладке, так как уменьшает количество
точек прерывания, которые нужно установить, чтобы исследовать что происходит в случае "fail", если ошибка возникает нерегулярно и проявляется только после какого-то периода работы в "реальных" условиях. Вообще-то выбор формы зависит от того пишется ли данный кусок программы сразу или появляется в результате "эволюции", а также от условий "написания". Не помню откуда: "... Извини, что написал тебе это длинное письмо - у меня не было времени написать короче."
...
Рейтинг: 0 / 0
01.03.2010, 10:19:04
    #36493985
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
Я правильно понимаю, что никакой разницы, кроме эстетичности и удобства, нет?
...
Рейтинг: 0 / 0
01.03.2010, 10:30:14
    #36494022
eNose
Участник
[не активирован]
[не одобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
an0nymЯ правильно понимаю, что никакой разницы, кроме эстетичности и удобства, нет? главное - удобство.

удобство комментирования блоков кода.
удобство выставления точек прерывания.
удобство понимания чужого кода.
...
Рейтинг: 0 / 0
01.03.2010, 10:40:23
    #36494051
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
eNose,

да мне в принципе в любом из трех вариантов удобно кодировать...

Всё таки - кроме удобства и субъективного "мне это нравится" есть разница?
...
Рейтинг: 0 / 0
01.03.2010, 10:58:06
    #36494105
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
программы уже давно пишутся для людей, а не для компиляторов. Так что просто поставьте себя на место другого человека, который видит код в первый раз и напишите его так, что-бы алгоритм работы был бы максимально читабелен и понятен.
...
Рейтинг: 0 / 0
01.03.2010, 11:18:57
    #36494168
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
Ggg_old,

это всё понятно. Я никогда в жизни код а-ля
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
function func() {
  if (smth) {
    goto p1;
  }

  p3:
  if (smth3) {
    goto p4;
  }
  
  end:
  return true;

  p1: 
  if (smth2) {
    goto p3;
  }
  
  p4:
  if (smth3) {
    goto end;
  }
}
писать не буду.

Вышеупомянутые подходы же кажутся мне хорошо читабельными. Поэтому интересно: при прочих равных (при равной читабельности) что лучше?
...
Рейтинг: 0 / 0
01.03.2010, 12:07:48
    #36494329
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
an0nymЯ правильно понимаю, что никакой разницы, кроме эстетичности и удобства, нет?
не согласен про эстетику. в данном конкретном случае вариант 3 наиболее удобочитаемый и "легкоусваяемый".
...
Рейтинг: 0 / 0
01.03.2010, 12:17:31
    #36494363
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
an0nymВышеупомянутые подходы же кажутся мне хорошо читабельными. Поэтому интересно: при прочих равных (при равной читабельности) что лучше?вариант 1 не является удобным ни с точки зрения написания, ни с точки зрения дальнейшей модернизации, ни с точки зрения последующего чтения. достаточно появиться одной-двум секциям else, как код превратится в совершенно непонятные макароны.
В этом смысле, подход 2 и 3 практически идентичны, различия - в личных предпочтениях. Мне, к примеру, более по душе вариант 3, а иногда приходится пользоваться подходом, предложенным avb1003, к примеру, при написании хранимок на TSQL 2000.
...
Рейтинг: 0 / 0
01.03.2010, 12:35:45
    #36494427
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
*безнадежным голосом* Так всё таки компилятору есть разница?
...
Рейтинг: 0 / 0
01.03.2010, 13:04:07
    #36494555
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
an0nym*безнадежным голосом* Так всё таки компилятору есть разница?

*не менее безнадежно*

Есть разница, компилятор, интерпретатор либо компилятор в байт код. Разница в 1, 10 либо 1.3 раза соответственно (условно).

Интерпретатор - чем меньше парсить текста, тем быстрее. Остальным пофигу.

А есть еще люди, которым этот код читать - это важнее всего.
...
Рейтинг: 0 / 0
01.03.2010, 13:08:59
    #36494585
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
an0nym*безнадежным голосом* Так всё таки компилятору есть разница?в общем случае, нет. Не думай за компилятор, пусть лучше он думает за тебя ;-)) пиши так, чтобы было понятно тебе и окружающим, используй профайлер, если найдёшь, что именно разница в таком написании условных операторов, тогда и оптимизируй. пиши для людей, а не для компилятора, в общем. Тут это уже говорили, впрочем.
ЗЫ. настоятельно рекомендую для просветления.
...
Рейтинг: 0 / 0
01.03.2010, 13:16:26
    #36494626
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
egorychиспользуй профайлер, если найдёшь, что именно разница в таком написании условных операторов, тогда и оптимизируй.
ЗЫ. настоятельно рекомендую для просветления.
Да я надеялся, может кто-то уже до меня профайлер заюзал. :( То что люди пишут, я до создания топика знал. :)
ЗЫ. Почитаю, спасибо.
...
Рейтинг: 0 / 0
01.03.2010, 14:15:22
    #36494802
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Стиль" кодирования - как правильно?
an0nymДа я надеялся, может кто-то уже до меня профайлер заюзал. :( на псевдокоде? хорошая шутка, смешная
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / "Стиль" кодирования - как правильно? / 25 сообщений из 37, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]