Геннадий Васильев пишет: > > >> > V>Ну и вопрос по сути. Вы получили по close не 0, что делать будете? >> > V>Жду рецепта "серебрянной пули". >> > Возвращаем ошибку в вышестоящий слой. > V>Поехали дальше, а что сделает вышестоящий слой? > > Вышестоящий слой для развлечения эту функцию вызывает? Если так, то ничего.
А если серьезно?
Здравствуйте, Vzhyk, Вы писали:
>> V>А вы попробуйте так писать код... >> Исключения рулят. V>Не везде и не всегда
Они как раз необходимость проверки всего убирают.
>> V>Жду рецепта "серебрянной пули". >> Возвращаем ошибку в вышестоящий слой. V>Поехали дальше, а что сделает вышестоящий слой?
Возвратит ошибку в вышестоящий слой
Cyberax пишет: > > >> > V>А вы попробуйте так писать код... >> > Исключения рулят. > V>Не везде и не всегда > Они как раз необходимость проверки всего убирают.
Напиши простой враппер на FILE*? Где fclose делать будешь?
Ну и сами исключения не везде есть еще.
> >> > V>Жду рецепта "серебрянной пули". >> > Возвращаем ошибку в вышестоящий слой. > V>Поехали дальше, а что сделает вышестоящий слой? > Возвратит ошибку в вышестоящий слой
И так до господа бога дойдем?
Здравствуйте, Vzhyk, Вы писали:
>> Хм. А я так и пишу... Особенно вспомогательную дребедень всяческую, от >> которой требуется получить только два результата: успех/ошибка. V>Т.е. на всякий чих проверяете коды возврата?
Почему? В некоторых случаях можно предполагать, что если предыдущая операция успешна, то и последующая будет успешной с приемлемо высокой вероятностью. Но в некоторых — нельзя. Например, операции записи в сокет, файл, реестр — вовсе не обязаны завершаться успешно, даже если предыдущая операция вернула OK. А значит, всё это надо проверять на сбой. И никуда от этого не денешься.
Кстати, C-шный fclose тоже можно не проверять, если а) предварительно сделать fflush и б) программа корректна и не корёжит дескрипторы.
>> С большой вероятностью удаление прошло бы успешно >> или вернуло бы код какого-нибудь FILE_NOT_EXIST, что тоже есть успех для >> такой операции. V>А если не прошло?
Возвращаем false. Значит, этот файл, даже если он обнаружится, нельзя считать корректным, поскольку запись в него не удалась. По идее, функция должна возвращать true только если все операции записи прошли успешно. Можно и не чистить за собой мусор, но тогда обнаруженный файл не может считаться корректным.
>> V>Жду рецепта "серебрянной пули". >> Не дождёшься. V>Вот и я об этом. Что решение и выбор подхода зависит от конкретной V>задачи в конкретном месте.
Именно. И именно в случае тестового задания на собеседовании имеет смысл показать полную обработку ошибок.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, mymuss, Вы писали:
M>Веб-ваятеля? Запросто. (Кроме разве что рыбных мест вроде NY, SFBA etc)
Ага, простого веб-ваятеля индуса.
M>Ну, положим на W2, так мы их и там на постоянку нанимаем.
Вот именно. А это + налоги, страховки, 401К и офис, который, кстати, и контрактеру нужен.
Здравствуйте, Vzhyk, Вы писали:
>> Хм. Значит, никогда не приходилось преобразовывать выражения вот так: >> >> if (!a || !b) ==> if (!(a && b)) >> >> ? V>Прекрасно. Но в чем смысл сего действа? Эстетическое удовлетворение?
Отнюдь. Например, так можно упростить логические условия и в конечном итоге, устранить какие-то ошибки. Понятно, что именно этот пример не имеет никакого смысла, кроме иллюстративного.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, olegkr, Вы писали:
ГВ>>Хм. Значит, никогда не приходилось преобразовывать выражения вот так: O>Вот оно как научно называется...
Ага. Может преподаваться в курсе дискретной математики. Чтобы потом оказаться, на первый взгляд, совершенно естественным.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Геннадий Васильев пишет: > > V>Т.е. на всякий чих проверяете коды возврата? > > Почему? В некоторых случаях можно предполагать, что если предыдущая > операция успешна, то и последующая будет успешной с приемлемо высокой > вероятностью.
Вероятность здесь неприменима. Применима только Ваша уверенность что
скорее всего будет или не будет успешна, а это исключительно
субъективная вещь и притом зависит от опыта.
> Но в некоторых — нельзя. Например, операции записи в > сокет, файл, реестр — вовсе не обязаны завершаться успешно, даже если > предыдущая операция вернула OK. А значит, всё это надо проверять на > сбой. И никуда от этого не денешься.
Но исходя из опыта и самой задачи я могу предположить, что в конкретном
мете операция завершится успешно.
А вот когда опыта мало, параноидальный код выходит.
> > Кстати, C-шный fclose тоже можно не проверять, если а) предварительно > сделать fflush и б) программа корректна и не корёжит дескрипторы.
Ага, только вот не корежит ли кто... и т.д. Ну и еще не забыть под какой
платформой мы находимся, ой нюансов всплывает.
> > Возвращаем false. Значит, этот файл, даже если он обнаружится, нельзя > считать корректным, поскольку запись в него /не удалась/. По идее, > функция должна возвращать true только если все операции записи прошли > успешно. Можно и не чистить за собой мусор, но тогда обнаруженный файл > не может считаться корректным. вы правы, но в реальности часто выгоднее допустить подобный недочет в
программе, именно по причине редкости подобной проблемы, чем увеличить
время разработки, особенно, если программа не для управления атомной
станцией.
Ну а решений данной ситуации, еще можно напридумывать и различных.
> > Именно. И именно в случае тестового задания на собеседовании имеет смысл > показать полную обработку ошибок.
Это уже Ваше видение, я противник такого. Собеседование — практически
всегда стресс и гарантировано, практически каждый человек наделает ошибок.
Мне важнее увидеть, как человек сможет работать, что он делал и как и
почему, или если опыта нет, как он будет решать определенную задачу,
конечно в плотной связи с программированием.
S>ИМХО такие вопросы имеет смысл задавать студентам, у которых опыта нет ни в чем, кроме как зубрить формулы для удовлетворения преподавательских бзиков. S>Если человек с опытом реальных разработок и претендует на более высокую должность, думаю стоит задавать вопросы более обобщеного характера (технологии, платформы, паттерны и т.п.).
Более того, опытный разработчик на формуле круга пошлет нахрен собеседователя. Ибо не экзамен в вузе сдавает. И будет прав.
Геннадий Васильев пишет: > >> > ? > V>Прекрасно. Но в чем смысл сего действа? Эстетическое удовлетворение? > > Отнюдь. Например, так можно упростить логические условия и в конечном > итоге, устранить какие-то ошибки. Понятно, что именно этот пример не > имеет никакого смысла, кроме иллюстративного.
Но и более сложные условия уже нетривиально упрощать.
Но ты опустил вторую часть моего поста о реальных задачах и проектах. А
вот здесь часто выгоднее (именно выгоднее) оставить как есть и не трогать.
Здравствуйте, Vzhyk, Вы писали:
V>Вероятность здесь неприменима. Применима только Ваша уверенность что V>скорее всего будет или не будет успешна, а это исключительно V>субъективная вещь и притом зависит от опыта.
Нет. Именно вероятность, которая и становится основой "уверенности". Например, вероятность отказа памяти достаточно мала, чтобы в большинстве случаев обойтись без дублирования и мажоритарной организации вычислений.
V>Но исходя из опыта и самой задачи я могу предположить, что в конкретном V>мете операция завершится успешно. V>А вот когда опыта мало, параноидальный код выходит.
Не надо обобщать. Наличие проверок не всегда означает, что к коду можно приклеить ярлык "параноидальный". И опыт — тоже не всегда надёжный советчик.
>> >> Кстати, C-шный fclose тоже можно не проверять, если а) предварительно >> сделать fflush и б) программа корректна и не корёжит дескрипторы. V>Ага, только вот не корежит ли кто... и т.д. Ну и еще не забыть под какой V>платформой мы находимся, ой нюансов всплывает.
Угу. Всплывёт.
V> вы правы, но в реальности часто выгоднее допустить подобный недочет в V>программе, именно по причине редкости подобной проблемы, чем увеличить V>время разработки, особенно, если программа не для управления атомной V>станцией. V>Ну а решений данной ситуации, еще можно напридумывать и различных.
Э... Зависит от многих факторов. Понятно, что "в реальности" требования к качеству зачастую снижаются. Но как тебе сказать... Собеседование, это своего рода игра. В сущности, игра несложная. Если даже в неё играть по правилам "тяп-ляп", то в этой самой пресловутой "реальности" всё может оказаться гаже и плоше.
>> >> Именно. И именно в случае тестового задания на собеседовании имеет смысл >> показать полную обработку ошибок. V>Это уже Ваше видение, я противник такого. Собеседование — практически V>всегда стресс и гарантировано, практически каждый человек наделает ошибок.
Ошибки ошибкам рознь. Можно забыть последовательность параметров или название метода. То о чём я здесь говорю — принципиальные вещи.
V>Мне важнее увидеть, как человек сможет работать, что он делал и как и V>почему, или если опыта нет, как он будет решать определенную задачу, V>конечно в плотной связи с программированием.
Ну, если бы я увидел тест без проверок открытия/записи, то однозначно бы засомневался в кандидате. Что он показывает? Что может быстро-быстро прилепить одну команду к другой в более или менее правильном порядке?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Vzhyk, Вы писали:
>> V>Прекрасно. Но в чем смысл сего действа? Эстетическое удовлетворение? >> >> Отнюдь. Например, так можно упростить логические условия и в конечном >> итоге, устранить какие-то ошибки. Понятно, что именно этот пример не >> имеет никакого смысла, кроме иллюстративного. V>Но и более сложные условия уже нетривиально упрощать.
Нетривиально, но принципы-то остаются одними и теми же.
V>Но ты опустил вторую часть моего поста о реальных задачах и проектах. А V>вот здесь часто выгоднее (именно выгоднее) оставить как есть и не трогать.
Одно другого не исключает. Если код не надо менять, то его и не меняют. А если надо менять, то аппарат ДМ вполне может пригодиться.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, olegkr, Вы писали:
M>>Веб-ваятеля? Запросто. (Кроме разве что рыбных мест вроде NY, SFBA etc) O>Ага, простого веб-ваятеля индуса.
Да хоть кенийца. Если он хорошо работает то какая разница кто он по национальности?
M>>Ну, положим на W2, так мы их и там на постоянку нанимаем. O>Вот именно. А это + налоги, страховки, 401К и офис, который, кстати, и контрактеру нужен.
Это грязными, сверху работодатель платит копейки налогов, основная нагрузка на сотрудника. Офис и так есть, страховка ну пусть +2-3К в год, 401К тоже мелочь пару процентов, да и не все сотрудники туда отчисляют.
Ну пусть это все добавит 10%, это несравнимо с затратами времени ПМ-ов на координацию работы с оффшорной командой.
Здравствуйте, olegkr, Вы писали:
ГВ>>На вскидку: теория множеств, булева алгебра. Это всё так, мимо проходили, да? O>Мимо. Когда-то учили. Не пригодилось за 15 лет, хотя чем только ни приходилось заниматься.
M>Та да, правильно сделает. Людей с избыточным самомнением я, например, в команде видеть не хочу.
не, я понимаю, хочется найти специалиста со знаниями синьера, и самомнением джуниора. Не знаю как в индии, но в россии по этому поводу говорят и на **й сесть, и рыбку съесть.
Здравствуйте, Grizzli, Вы писали:
G>Более того, опытный разработчик на формуле круга пошлет нахрен собеседователя. Ибо не экзамен в вузе сдавает. И будет прав.
За всех не расписывайся, ладно?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Grizzli, Вы писали:
M>>Та да, правильно сделает. Людей с избыточным самомнением я, например, в команде видеть не хочу.
G>не, я понимаю, хочется найти специалиста со знаниями синьера, и самомнением джуниора. Не знаю как в индии, но в россии по этому поводу говорят и на **й сесть, и рыбку съесть.
Безотносительно к регалиям и положению на служебной лестнице. Если у человека зашкаливает самомнение и гонор брызжет из ушей, то такой человек в коллективе принесет больше вреда чем пользы. ИМХО отказ на собеседовании решать простые задачи однозначно сигнализирует об этом. (Могу, конечно ошибаться, я все-таки не психолог)
Кстати, тут была недавно тема, кандидат отказался тесты писать, дескать простые слишком, оскорбляют его достоинство.
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Зависит от контекста. В случае простой функции, которая должна вернуть true/false, вернул бы false, и попытался бы удалить только что созданный недозаписанный файл. С большой вероятностью удаление прошло бы успешно или вернуло бы код какого-нибудь FILE_NOT_EXIST, что тоже есть успех для такой операции.
RSDN в своем амплуа. Опять решаем сферические задачи в вакууме. А потом удивляемся, откуда берутся "ошибки записи при чтении".
А если файл на флешке, которую только что вытащили, тоже удалять будем, да?
Что там возвращает close — это, по большому счету, уже не наше дело. Может, файловой системе пришел зелененький и мерзкий, но это нужно оставить на откуп ОС.