powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Праграмист, пешы красива!
25 сообщений из 98, страница 3 из 4
Праграмист, пешы красива!
    #34859121
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про то, что иметь много точек выхода из функции не есть хорошая практика, Вам кажется уже говорили... Но вот это
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
 SELECT @country_name = country.country_name
   FROM country,
	 city,
	 address
  WHERE country.country_id = city.country_id
    AND city.city_id = address.city_id
    AND address.address_id = @address_id;

*** GOOD code (the "divide and conquer" approach): *** 



 SELECT @country_name = country_name
   FROM country
  WHERE country_id =

	(SELECT country_id
	   FROM city
	  WHERE city_id =

		(SELECT	 city_id
		   FROM address
		  WHERE address_id = @address_id))
Таким кодом оптимизатор запутать на раз можно. Его не удобно модифицировать. Если вдруг потребуется оптимизатору указать hint, то при таком способе записи это будет сделать невозможно.
Я бы написал например так:
Код: plaintext
1.
2.
3.
SELECT @country_name = country.country_name
   FROM country join city on country.country_id = city.country_id
	          join address on city.city_id = address.city_id
  WHERE address.address_id = @address_id;
PS. Статью не читал - просто это первое, что бросилось в глаза.
PSS. А еще у Вас шрифт в статье дурацкий - читать сложно. :)
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34859148
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И то что дальше объявляется very good code - тоже под большим вопросом.
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34859964
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Маркиметь много точек выхода из функции не есть хорошая практика
В статье четко написано в каких именно случаях правильнее отойти от правила единой точки выхода.
И в этой части я с автором согласен. Так как иначе возникают чрезмерные вложенности if в которых часто забывают else и которые трудно модифицировать и отлаживать, и в которых часто дублируется код из разных уровней вложенности. Также возникают всевозможные флаги которые по сути те же выходы, но формально (синтаксически) ими не являются и это затрудняет понимание того, что делает код.
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34860522
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyВ статье четко написано в каких именно случаях правильнее отойти от правила единой точки выхода.
Да, есть, при беглом просмотре не заметил. Но все равно специально писать условия через not - менее наглядно. Потому как обычно условия формулируются по принципу "если то-то, то так-то", а не "если не то-то то так-то". Соответственно код не перегруженный кучей условий not более понятен для восприятия.
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34861527
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Марк, ты же знаешь - сколько программистов, столько и мнений :-). Я описал своё видение, и если другие считают наоборот - это вполне нормально и ожидаемо. Описанные трюки и решения не из пальца высосаны, а либо взяты от мастеров, с которыми общался, либо пришёл к ним методом проб и ошибок сожрав не одну собаку. Заранее знаю, что у статьи будет немало оппонентов, причём зачастую привыкших к не совсем правильным решениям, приняв их в начале как авторитетные (я могу сейчас в пух и прах разбомбить ту-же теорию о единой точке выхода, с которой многие носятся как с писанной торбой, хотя легче отослать к патриарху - Дейкстре), а когда привык к чему-нибудь, то отвыкнуть очень нелегко (примеры - курение или сваливание нескольких SQLей в одну кучу). Я всё это не от нефиг делать написАл, а потому что наболело - работал я тогда в фирме (слава Богу, свалил, не поддавшись на предложение остаться на постоянку в правительстве провинции - такого счастья мне не надо!), где в функциях было больше строк кода, чем в исходние первой версии Линукса (имею в виду В ОДНОЙ ФУНКЦИИ!!!), а мой экран был залапан пальцем так, что периодически приходилось вытирать отпечатки как после ограбления (например, держал на экране уровень 5-го таба из 7, пытаясь найти if-овский end if с помощью скроллинга вниз).

Кстати, всем привет от живущего у нас в Калгари мужичка, бывшего частью PowerBuilder team. Увы, работает дибиэем в нефтяной отрасли, в будущее PowerBuilder-а не верит... Кстати, однофамилец того самого великого Дейкстры!
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34861568
Фотография Ursego
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyТакже возникают всевозможные флаги которые по сути те же выходы, но формально (синтаксически) ими не являются и это затрудняет понимание того, что делает код.Абсолютно верно! Какая логически разница сделать return сразу или через посредника, сначала перейдя к нему, чему хошь-не хошь будет посвящено несколько лишних строк? Это как exception handler - абсолютно тот-же самый goto если говорить в рамках одного скрипта. Но скажи, что используешь goto - забросают камнями. А какая нафиг разница? Не использовать этот удобный в определённых условиях оператор только потому, что несколько десятилетий назад с ним боролись, пытаясь заменить на if (программеры старой закалки продолжали писать на появившихся языках 3-го поколения в стиле ассемблера, к которому привыкли, производя спагетти-код - тогда борьба с goto была оправдана, но вошла во все учебники программирования явно потому, что авторы бездумно повторяли чужую и устаревшую мысль). Короче, думать надо, а не делать copy/paste чужих идей на полном автомате.
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34861578
asmod64
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМНО Неплохая статья и в нагрузку еще
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34862445
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ursego Я всё это не от нефиг делать написАл, а потому что наболело - работал я тогда в фирме
Это понятно, что плохое правило лучше чем никакое. Но не нужно же давать откровенно вредные советы. Про good code - я уже упомянул. Посмотрим на very good code. Я уж не говорю про то, что разобраться в 4 строках кода легче чем в 9 + объявление переменных и то что в последствии между этими строками кода еще чего-нибудь может получиться. Я не говорю, что таким способом записи фактически жестко прописывается план исполнения... Понимаете, 3 select'а написанные подряд - это совсем не тоже самое, что 1 select. В результате далеко не всегда будет одно и тоже.
UrsegoКакая логически разница сделать return сразу или через посредника, сначала перейдя к нему, чему хошь-не хошь будет посвящено несколько лишних строк?
Разница вот какая. Если у меня есть один return, то я точно знаю место в скрипте, которое будет исполняться непосредственно перед выходом из процедуры. Соответственно если мне понадобилось изменить процедуру так, чтобы для каких-то целей выделялся какой-то ресурс, то код по его освобождению я напишу 1 раз в конце функции. Если у меня много точек выхода, то я должен найти все и заменить
Код: plaintext
1.
2.
3.
4.
5.
if not condition then return - 1 
на 
if not condition then
  Free(X)
  return - 1 
end if
Так что польза от 1 точки выхода есть.
Кстати по поводу оформления таких кусочков кода
Я предпочитаю всегда писать
Код: plaintext
1.
2.
if @a =  1  begin
  select  1 
end
а не
Код: plaintext
1.
if @a =  1  
  select  1 
Почему? 1. операторные скобки (да и обычные) полезно набирать "на автомате", а потом уже внутри писать текст - тогда потом не нужно будет нудно считать где забыл открыть/закрыть. 2. - когда понадобится внести второй оператор не нужно будет искать конец оператора который после if (а select может быть и на страницу и на две). 3. Можно просто напросто забыть дописать скобки - естественно получится не то, что нужно.
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34862547
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркСоответственно если мне понадобилось изменить процедуру так, чтобы для каких-то целей выделялся какой-то ресурс, то код по его освобождению я напишу 1 раз в конце функции. Если у меня много точек выхода, то я должен найти все и заменить

Кошмар! "найти и заменить"... нет слов.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
try
    ...
    if not condition throw conditionException
    ...
    returnValue = SUCCESS
catch (conditionException)
    ...
    returnValue = FAILURE
finally
    Free(X)
    return returnValue
end try
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34862597
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗоринАндрейКошмар! "найти и заменить"... нет слов.
1. Сколько точек выхода будет в данной функции? Посчитать по пальцам?
2. Оператор try есть не во всех версиях PB (по-моему с 7).
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34862798
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркЕсли у меня есть один return, то я точно знаю место в скрипте, которое будет исполняться непосредственно перед выходом из процедуры. Соответственно если мне понадобилось изменить процедуру так, чтобы для каких-то целей выделялся какой-то ресурс, то код по его освобождению я напишу 1 раз в конце функции. Если у меня много точек выхода, то я должен найти все и заменить
Код: plaintext
1.
2.
3.
4.
5.
if not condition then return - 1 
на 
if not condition then
  Free(X)
  return - 1 
end if
Так что польза от 1 точки выхода есть.

Еще раз.
"if not condition then return -1" касается только предусловий, т.е. определения возможности выполнения основного кода ф-и. И в этот момент о выделении или освобождении ресурсов речь еще не идет.
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34862818
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк1. Сколько точек выхода будет в данной функции? Посчитать по пальцам?
Одна.
Локшин Марк2. Оператор try есть не во всех версиях PB (по-моему с 7).
Если кто-то еще пользуется шестеркой - мне остается только посочувствовать.
ИМХО странно вырабатывать стиль принимая во внимание версии 10летней давности.
Все равно что сказать - мы не будем использовать ANSI Join syntax потому что его не было в версии x.x восемь лет назад.
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34862827
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyЕще раз.
"if not condition then return -1" касается только предусловий, т.е. определения возможности выполнения основного кода ф-и. И в этот момент о выделении или освобождении ресурсов речь еще не идет.
В случае нескольких уровней Exception позволяет выйти сразу на верхний уровень не засоряя код чем-то таким
Код: plaintext
1.
2.
rc = of_function(...)
if rc = FAILURE return FAILURE
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34862841
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyкасается только предусловий, т.е. определения возможности выполнения основного кода ф-и. И в этот момент о выделении или освобождении ресурсов речь еще не идет.
Никто не сказал, что "parameters checking" не потянет необходимости выделения ресурсов. Например - передаются 2 параметра - имена файлов, а в функции необходимо чтобы файлы уже существовали. Поэтому мне нужно будет попытаться открыть - 1 файл и завершиться с ошибкой если его нет, а затем открыть второй файл и освободить первый файл и завершиться с ошибкой если нет второго. И это всего лишь "parameters checking".
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34862945
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗоринАндрейОдна.
Ну и к чему тогда твой пассаж?
Я понимаю, если бы это было ответом на это
Anatoly MoskovskyТак как иначе возникают чрезмерные вложенности if в которых часто забывают else и которые трудно модифицировать и отлаживать,
или вот это
UrsegoНо скажи, что используешь goto - забросают камнями. А какая нафиг разница? Не использовать этот удобный в определённых условиях оператор
Но оспаривать кодом с одной точкой возврата мой тезис
Локшин Маркиметь много точек выхода из функции не есть хорошая практика
и далее поясняющий пример по-моему как-то не логично.
ЗоринАндрейЕсли кто-то еще пользуется шестеркой - мне остается только посочувствовать.
Это было так, к слову :). Но ведь кто-то еще пользуется.
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34862996
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код программиста - это тот же почерк
Чаще всего он уникален, есть просто вещи которыми каждый руководствуется неосознано (речь идет не о новичках, которым как первоклашкам и надо выработать почерк - косые палочки писать:)). Стиль вырабатывается годами
Так что религиозные войны тут не к чему, лучше сообща сформировать правила и их альтернативы
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34863032
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркНу и к чему тогда твой пассаж?Э.... Ну да... Я тут про годовщину свадьбы забыл.
Не то что форум читать внимательно...
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34863294
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк Anatoly Moskovskyкасается только предусловий, т.е. определения возможности выполнения основного кода ф-и. И в этот момент о выделении или освобождении ресурсов речь еще не идет.
Никто не сказал, что "parameters checking" не потянет необходимости выделения ресурсов. Например - передаются 2 параметра - имена файлов, а в функции необходимо чтобы файлы уже существовали. Поэтому мне нужно будет попытаться открыть - 1 файл и завершиться с ошибкой если его нет, а затем открыть второй файл и освободить первый файл и завершиться с ошибкой если нет второго. И это всего лишь "parameters checking".
Этот случай не предусловие. Ошибка происходит уже при работе основного кода функции (в котором попытка открытия файла для последующего чтения используется для проверки наличия файла).
В этом случае правильнее всего применять генерацию исключения при ошибке чтения файла с освобождением ресурсов в FINALLY. А проверку наличия выделить в отдельный блок кода в начале ф-и, не мешая его с обработкой файла.

Я уже не говорю о том, что должна быть отдельная ф-я проверяющая наличие файла (допустим что в PB такой нет) , и тогда никаких проблем в освобождением ресурсов не будет. И читаемость кода повышается - явный вызов of_CheckIfFileExists понятен сразу, тогда как FileOpen; If ... еще нужно интерпретировать из контекста.
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34863334
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, goto - это жесть
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34863378
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyА проверку наличия выделить в отдельный блок кода в начале ф-и, не мешая его с обработкой файла.

Я уже не говорю о том, что должна быть отдельная ф-я проверяющая наличие файла (допустим что в PB такой нет) , и тогда никаких проблем в освобождением ресурсов не будет. И читаемость кода повышается - явный вызов of_CheckIfFileExists понятен сразу, тогда как FileOpen; If ... еще нужно интерпретировать из контекста.
Ага щаз. А если голову включить? Проверка должна, именно должна захватывать файл чтобы никто с ним ничего не мог сделать. FileExists то проверить наличие сможет, но только для Вашего личного успокоения, и ничего более. Потому как сразу после исполнения FileExists он может быть кем угодно удален (сюрприз-сюрприз). И хоть обпишитесь вы своих функций проверки - все будет бестолку. Я же говорю - не нужно давать откровенно вредных советов.
Вы Анатолий (если сами не заметили) только что просто очень наглядно продемонстрировали к чему такой подход ведет.
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34863458
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркАга щаз. А если голову включить? Проверка должна, именно должна захватывать файл чтобы никто с ним ничего не мог сделать. FileExists то проверить наличие сможет, но только для Вашего личного успокоения, и ничего более. Потому как сразу после исполнения FileExists он может быть кем угодно удален (сюрприз-сюрприз).
Вы невнимательно читаете. У меня проверка наличия вынесена отдельно, но при этом обработка ошибок при чтении файлов сохраняется. Эти два действия не одно и тоже и мешать их в кучу - только затруднять дальнейшее понимание написанного кода.
Отсутствие файла при проверке предусловий - штатная ситуация, а вот исчезновение файла после проверки на наличие - это нештатная ситуация (исключение) и решаются они разными способами.
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34863678
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyОтсутствие файла при проверке предусловий - штатная ситуация, а вот исчезновение файла после проверки на наличие - это нештатная ситуация (исключение) и решаются они разными способами.
Что значит разными способами? Какая мне разница когда удалили файл - за секунду до того как я его открыл или за час? С чего это вдруг в одном случае не штатная ситуация, а в другом - штатная? И почему от этого должен зависить способ решиния проблемы?
Anatoly Moskovskyобработка ошибок при чтении файлов сохраняется
По-моему про это вообще никто не говорил. Также никто не говорил, например, о проблемах с взаимоблокировками.
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34863760
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк Anatoly MoskovskyОтсутствие файла при проверке предусловий - штатная ситуация, а вот исчезновение файла после проверки на наличие - это нештатная ситуация (исключение) и решаются они разными способами.
Что значит разными способами? Какая мне разница когда удалили файл - за секунду до того как я его открыл или за час? С чего это вдруг в одном случае не штатная ситуация, а в другом - штатная? И почему от этого должен зависить способ решиния проблемы?
Anatoly Moskovskyобработка ошибок при чтении файлов сохраняется
По-моему про это вообще никто не говорил. Также никто не говорил, например, о проблемах с взаимоблокировками.
Все описанные Вами проблемы могут возникнуть независимо от стиля кодирования, поэтому не вижу смысла обсуждать их в этом топике.
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34863841
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyВсе описанные Вами проблемы могут возникнуть независимо от стиля кодирования, поэтому не вижу смысла обсуждать их в этом топике.
Проблемы -то возникнуть могут только как Вы их предлагаете решать? В таком духе:
Код: plaintext
1.
2.
3.
c =  2 
b =  2 
if c <>  2  then return - 1 
if b <>  2  then return - 1 
Понимаете, если есть задача использовать ресурс, то проверять его наличие не захватив его - бесполезно. Есть, конечно, небольшие оговорки, но в общем и целом - картина такая. Зачем два раза проверять? Чтобы сохранить чистоту идеи? Почему тогда 3 раза не проверить?
...
Рейтинг: 0 / 0
Праграмист, пешы красива!
    #34863902
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк Anatoly MoskovskyВсе описанные Вами проблемы могут возникнуть независимо от стиля кодирования, поэтому не вижу смысла обсуждать их в этом топике.
Проблемы -то возникнуть могут только как Вы их предлагаете решать?
Есть множество способов решить указанные проблемы, но ни один не имеет отношение к стилю кодирования (напомню тему топика). По этой причине я не собираюсь их обсуждать. Кроме того это просто неинтересно - все техники работы с разделяемыми ресурсами давно известны и тут нечего обсуждать.
...
Рейтинг: 0 / 0
25 сообщений из 98, страница 3 из 4
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Праграмист, пешы красива!
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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