Шедевр кода

User avatar
geek7
Уже с Приветом
Posts: 20297
Joined: 01 Dec 2003 23:16
Location: Russia->USA

Re: Шедевр кода

Post by geek7 »

Prosche wrote: 10 Jan 2018 18:40
geek7 wrote: 10 Jan 2018 16:35
Prosche wrote: 10 Jan 2018 03:19

Code: Select all

	static IReadOnlyDictionary<string,string> v = new Dictionary<string, string>() {
				{"МОСКВА","000000010"},
				{"ХИМКИ", "000000193"},
				{"САНКТ-ПЕТЕРБУРГ","000000001"}
			};
	private static string GetCityCodeByCityName(string name)
	{
		try { return v[name.ToUpper()]; }
		catch { return "000000000"; }
	}
я в сишарпном синтаксисе не копенгаген, но если кто-то v = null; сделает, то GetCityCodeByCityName на все города будет выдавать "000000000" (как и на аргумент null )?
извиняюсь за глупый вопрос
Будет, что логично, нет словаря, нет и результата, но v приватный (по умолчанию в шарпе) член класса, т.е. изменить снаружи класса его нельзя. Можно конечно изнутри. Если это проблема, можно сделать интерфейс с гетером и обращаться через него, но это уже немного паранойя, потому что с таким же успехом враг может и просто саму функцию заменить:
private static string GetCityCodeByCityName(string name)
{
return "000000000";
}
:crazy:
ну тут злой умысел будет налицо.. а вот если он таки сподобится загрузить список из какой-то базы/файла итд и катапейстнет свой IReadOnlyDictionary loadCityCodeByCityName() из Вашего примера string GetCityCodeByCityName() заменив catch { return "000000000"; } на catch { return null; } а к базе законектится в продакшене не получится...
то имеем "всё работает в деве, в продакшене все города возвращают "000000000"" и 2 проглоченные эксепшены - одна индусом о коннекте к базе, другая Вами о налпойнтере....как-то так
короче: булет-пруфт код тоже может оказатся неполезным

PS Я правильно понимаю, что в Вашем варианте Dictionary вернёт null на город "зажопинск", а Димин пример "000000000" ? а если у них юнит-теста на несуществующий город нет?

PPS вот глянул на свою писанину.. и возникло ощущение что я фалометрией занялся :oops: хотя, вроде, на этот сравнительный анализ органов глубоко плевать и цели такой небыло.... и вообще что-то в последнее время на кодирование и не стоит :cry: :oops:
Говори что думаешь, думай что говоришь!
Маразм крепчал и скрепы гнулись
User avatar
Prosche
Уже с Приветом
Posts: 8090
Joined: 08 Nov 2004 12:24
Location: GA

Re: Шедевр кода

Post by Prosche »

geek7 wrote: 10 Jan 2018 18:55 ну тут злой умысел будет налицо.. а вот если он таки сподобится загрузить список из какой-то базы/файла итд и катапейстнет свой IReadOnlyDictionary loadCityCodeByCityName() из Вашего примера string GetCityCodeByCityName() заменив catch { return "000000000"; } на catch { return null; } а к базе законектится в продакшене не получится...
то имеем "всё работает в деве, в продакшене все города возвращают "000000000"" и 2 проглоченные эксепшены - одна индусом о коннекте к базе, другая Вами о налпойнтере....как-то так
короче: булет-пруфт код тоже может оказатся неполезным

PS Я правильно понимаю, что в Вашем варианте Dictionary вернёт null на город "зажопинск", а Димин пример "000000000" ? а если у них юнит-теста на несуществующий город нет?

PPS вот глянул на свою писанину.. и возникло ощущение что я фалометрией занялся :oops: хотя, вроде, на этот сравнительный анализ органов глубоко плевать и цели такой небыло.... и вообще что-то в последнее время на кодирование и не стоит :cry: :oops:
Да, такое же ощущение :)
В своем примере я не менял не входящие не выходящие значения, а оставил как у Димы, на входе город, на выходе код или "0000000" если не найден. По уму я бы конечно исходил из задачи, если есть шанс, что словарь не захардкожен, а грузится и может быть поврежден, сделал бы проверку, возможно в функции, возможно в конструкторе, исходя из логики загрузки. Если не найденный город плохо, то вместо return "0000000" бросал бы эксепшн и т.д. Идея была показать, что решение со словарем ничуть не длиннее, не сложнее, не... в общем лучше всяких ифов и свитчей:)
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15526
Joined: 27 Sep 2007 22:53

Re: Шедевр кода

Post by Мальчик-Одуванчик »

Мне не нравится само провоцирование на генерацию исключения.
Собственно, исключения предназначены для обработки нештатных ситуаций, а в вышепреведенном примере обычная рутина приводит к генерации и обработке исключения, без чего можно прекрасно обойтись. К примеру, в плюсах подобные примеры, наоборот приводятся как образчик того, что настойчиво рекомендуется избегать.
User avatar
Prosche
Уже с Приветом
Posts: 8090
Joined: 08 Nov 2004 12:24
Location: GA

Re: Шедевр кода

Post by Prosche »

Мальчик-Одуванчик wrote: 10 Jan 2018 20:49 Мне не нравится само провоцирование на генерацию исключения.
Собственно, исключения предназначены для обработки нештатных ситуаций, а в вышепреведенном примере обычная рутина приводит к генерации и обработке исключения, без чего можно прекрасно обойтись. К примеру, в плюсах подобные примеры, наоборот приводятся как образчик того, что настойчиво рекомендуется избегать.
Согласен. Только надо брать во внимание, что в плюсах исключение это абнормальная ситуация, в силу оверхеда на размер и производительность их там вообще лучше не использовать без крайней нужды, фактически исключение в плюсах это аппликация валиться и перед смертью мы пытаемся чтото спасти или зафиксировать в журнале, в шарпе же это вполне рабочий инструмент и уж точно прекрасно подходит для случая когда у нас поломан классификатор или пришли данные которых мы не ждем.
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15526
Joined: 27 Sep 2007 22:53

Re: Шедевр кода

Post by Мальчик-Одуванчик »

В плюсах - это как раз именно обработка нештатных ситуаций, связанных с потерей соединения, нехваткой памяти или выходу за ее границы, отказу оборудования, ошибками ввода-вывода и прочим. Валиться при этом необязательно и обычно работа продолжается с ограниченным необходимым функционалом. Более того - приложения чаще всего и проектируются, чтобы продолжать работать с базовым функционалом, принеся в жертву второстепенный или временно ограничив производительность. То что вы описали больше напоминает необработанное на нужном уровне исключение, прорвавшееся на самый верх, когда все что с ним можно сделать - это что-то спасти перед тем как отстрелиться.
User avatar
Prosche
Уже с Приветом
Posts: 8090
Joined: 08 Nov 2004 12:24
Location: GA

Re: Шедевр кода

Post by Prosche »

Я живу в мире эмбеддед, у нас исключения применяются так, как я описал. Плюсы в менее требовательной среде могут использовать исключения более свободно, так что соглашусь с вами.
Pantigalt
Уже с Приветом
Posts: 803
Joined: 24 Jan 2007 07:32
Location: Сергели->Новосибирск->SFBA->Новосибирск->Москва->NY->SFBA

Re: Шедевр кода

Post by Pantigalt »

Prosche wrote: 10 Jan 2018 21:17 К примеру, в плюсах подобные примеры, наоборот приводятся как образчик того, что настойчиво рекомендуется избегать.

Согласен. Только надо брать во внимание, что в плюсах исключение это абнормальная ситуация, в силу оверхеда на размер и производительность их там вообще лучше не использовать без крайней нужды, фактически исключение в плюсах это аппликация валиться и перед смертью мы пытаемся чтото спасти или зафиксировать в журнале, в шарпе же это вполне рабочий инструмент и уж точно прекрасно подходит для случая когда у нас поломан классификатор или пришли данные которых мы не ждем.
То что можно использовать исключения никто не спорит. Но нужно ли?
Почему вы думаете что область применения исключений в С++ и C# должно отличаться?
Одной из причин появления исключений в C++ изначально являлась генерация ошибки в конструкторе по разным причинам.

В примере вполне можно без исключений обоитись проверяя наличие значения в словаре и проверяяя ключ на null.
Спи быстрее, твоя подушка нужна другому. Copyright Зощенко
User avatar
geek7
Уже с Приветом
Posts: 20297
Joined: 01 Dec 2003 23:16
Location: Russia->USA

Re: Шедевр кода

Post by geek7 »

Prosche wrote: 10 Jan 2018 19:39 Идея была показать, что решение со словарем ничуть не длиннее, не сложнее, не... в общем лучше всяких ифов и свитчей:)
Т.е. поскольку место капитана уже занято
подались в лейтенанты :D
Говори что думаешь, думай что говоришь!
Маразм крепчал и скрепы гнулись
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15526
Joined: 27 Sep 2007 22:53

Re: Шедевр кода

Post by Мальчик-Одуванчик »

Prosche wrote: 10 Jan 2018 22:16 Я живу в мире эмбеддед, у нас исключения применяются так, как я описал. Плюсы в менее требовательной среде могут использовать исключения более свободно, так что соглашусь с вами.
C трудом представляю как там вообще можно пользоваться шарпом, где одна среда исполнения весит немеряно.
Обычно при программировании встроенного железа исключения вообще отрубают нафиг на этапе компиляции.
User avatar
AndreyT
Уже с Приветом
Posts: 3003
Joined: 14 Apr 2004 01:11
Location: SFBA (было: Минск, Беларусь)

Re: Шедевр кода

Post by AndreyT »

Prosche wrote: 10 Jan 2018 21:17...фактически исключение в плюсах это аппликация валиться и перед смертью мы пытаемся чтото спасти или зафиксировать в журнале,...
Нет, ни в коем случае. В плюсах исключения - обработка нештатных ситуаций, т.е. ошибок, но совсем не обязательно связанных с "аппликация валиться и перед смертью". Вся философия исключений в С++ построена вокруг идеи того, что исключения являются recoverable. "Перед смертью" - это скорее подыерархия logical errors. Когда же речь идет о подыерархии runtime errors, никакого "перед смертью" не подразумевается.

А уж вопрос о том, является ли каждая конкретная нештатная ситуация поводом для выбрасывания исключения или нет - это неоднозначный вопрос дизайна, стоящий одинаково во всех языках программирования. Вплоть до реализации обеих возможностей, как это сделано в стандартных потоках ввода-вывода в С++.
Best regards,
Андрей
User avatar
Prosche
Уже с Приветом
Posts: 8090
Joined: 08 Nov 2004 12:24
Location: GA

Re: Шедевр кода

Post by Prosche »

Мальчик-Одуванчик wrote: 10 Jan 2018 22:47
Prosche wrote: 10 Jan 2018 22:16 Я живу в мире эмбеддед, у нас исключения применяются так, как я описал. Плюсы в менее требовательной среде могут использовать исключения более свободно, так что соглашусь с вами.
C трудом представляю как там вообще можно пользоваться шарпом, где одна среда исполнения весит немеряно.
Обычно при программировании встроенного железа исключения вообще отрубают нафиг на этапе компиляции.
Вообще я выше писал, что шарп не очень знаю, а на плюсах пишу, в ембедед.
Но все же если хотите расширите свои представления, погуглите "mono embedded"
User avatar
Prosche
Уже с Приветом
Posts: 8090
Joined: 08 Nov 2004 12:24
Location: GA

Re: Шедевр кода

Post by Prosche »

AndreyT wrote: 10 Jan 2018 23:27
Prosche wrote: 10 Jan 2018 21:17...фактически исключение в плюсах это аппликация валиться и перед смертью мы пытаемся чтото спасти или зафиксировать в журнале,...
Нет, ни в коем случае. В плюсах исключения - обработка нештатных ситуаций, т.е. ошибок, но совсем не обязательно связанных с "аппликация валиться и перед смертью". Вся философия исключений в С++ построена вокруг идеи того, что исключения являются recoverable. "Перед смертью" - это скорее подыерархия logical errors. Когда же речь идет о подыерархии runtime errors, никакого "перед смертью" не подразумевается.

А уж вопрос о том, является ли каждая конкретная нештатная ситуация поводом для выбрасывания исключения или нет - это неоднозначный вопрос дизайна, стоящий одинаково во всех языках программирования. Вплоть до реализации обеих возможностей, как это сделано в стандартных потоках ввода-вывода в С++.
Философия философией, а до недавних пор имплементация исключений была настолько кривой, что роняла и перфоманс и размер финального бинарника удваивала. -fno-exceptions не просто так придумали и весь геморрой с поддержкой двух версий "с" и "без" не на ровном месте появился.
nightmare2
Уже с Приветом
Posts: 7187
Joined: 31 Jan 2005 15:06
Location: GA

Re: Шедевр кода

Post by nightmare2 »

Мальчик-Одуванчик wrote: 10 Jan 2018 22:47 C трудом представляю как там вообще можно пользоваться шарпом, где одна среда исполнения весит немеряно.
...
Да сколько она там весит.
Мегабайт 100-200?
Копейки, по нынешним меркам.
Vaiyo A-O, A Home Va Ya Ray, Vaiyo A-Rah, Jerhume Brunnen G!
User avatar
Prosche
Уже с Приветом
Posts: 8090
Joined: 08 Nov 2004 12:24
Location: GA

Re: Шедевр кода

Post by Prosche »

nightmare2 wrote: 11 Jan 2018 03:09 Да сколько она там весит.
Мегабайт 100-200?
Копейки, по нынешним меркам.
На нашем устройстве еще недавно (2 года назад) было 32 мега рама и 32 флеша (это на продвинутом, а на бюджетном 16 рама, из них оська занимала 9) и крутись как хочешь. Резонно спросить нахуа весь этот цирк, если разница в 5$? но кода речь идет о продажах миллионными тиражами, увы, страдают софт. девелоперы. На новых устройствах уже страшно сказать 128Мб, а на топовых 512! :shock: :D
StrangerR
Уже с Приветом
Posts: 38016
Joined: 14 Dec 2006 20:13
Location: USA

Re: Шедевр кода

Post by StrangerR »

geek7 wrote: 10 Jan 2018 22:40
Prosche wrote: 10 Jan 2018 19:39 Идея была показать, что решение со словарем ничуть не длиннее, не сложнее, не... в общем лучше всяких ифов и свитчей:)
Т.е. поскольку место капитана уже занято
подались в лейтенанты :D
Где как. У меня например (1) шаблоны там и (2) важна последовательность их проверки.

Конечно можно массив изобразить но обычные if ничуть не хуже были. Хотя и некрасиво конечно.

Return to “Вопросы и новости IT”