Шедевр кода
-
- Уже с Приветом
- Posts: 2406
- Joined: 09 Jul 2001 09:01
Re: Шедевр кода
тем кто возмущается отсутствием toUpperCase
хочу заметить, что в коде может быть что-то типа GetCityCodebyCityNameUpper(toUpperCase(string)) написано
хочу заметить, что в коде может быть что-то типа GetCityCodebyCityNameUpper(toUpperCase(string)) написано
-
- Уже с Приветом
- Posts: 7187
- Joined: 31 Jan 2005 15:06
- Location: GA
Re: Шедевр кода
Линейное программирование использует методы линейной алгебры: матрицы, линейные уравнения там всякие для поиска экстремума.
Отсюда видимо и путаница.
Отсюда видимо и путаница.
Vaiyo A-O, A Home Va Ya Ray, Vaiyo A-Rah, Jerhume Brunnen G!
-
- Уже с Приветом
- Posts: 8090
- Joined: 08 Nov 2004 12:24
- Location: GA
Re: Шедевр кода
Точно. Вот если бы в коде были кейсы для всех вариантов, мОсква, моСква и тп. Тогда да, немедленно снял бы шляпу.
-
- Уже с Приветом
- Posts: 38016
- Joined: 14 Dec 2006 20:13
- Location: USA
Re: Шедевр кода
У меня в служебных скриптах такого полным полно (в смысле перебора, а не Москва | мОсква...). Например в привязке к проекту по имени VM тупо стоит куча if на перле. Что мне там, ассоциативный массив писать и шаблоны из него тащить? Надо будет, сделаем, пока не нужно... (НО правда я за объем кода не получаю, просто скрипты категории _раз написать и 100 раз заюзать и все..._)Prosche wrote: ↑09 Jan 2018 22:43Точно. Вот если бы в коде были кейсы для всех вариантов, мОсква, моСква и тп. Тогда да, немедленно снял бы шляпу.
-
- Уже с Приветом
- Posts: 56113
- Joined: 06 May 2001 09:01
Re: Шедевр кода
Почему то всю жизнь был уверен, что линейное от нелинейного (программирования) отличается исключительно степенью системы уравнений целевой функции. Систему линейных уравнений можно решить и с помощью матриц. Нелинейная система в общем случае так не решается, отсюда и выплыло множество алгоритмов минимизации.nightmare2 wrote: ↑09 Jan 2018 21:37 Линейное программирование использует методы линейной алгебры: матрицы, линейные уравнения там всякие для поиска экстремума.
Отсюда видимо и путаница.
в реале супруги редко бывают друзьями, так как их отношения подпорчены сексом (с)Роза
Плавали-Знаем! (C)
Плавали-Знаем! (C)
-
- Уже с Приветом
- Posts: 8090
- Joined: 08 Nov 2004 12:24
- Location: GA
Re: Шедевр кода
Вы позволите я вам как художник художнику...StrangerR wrote: ↑09 Jan 2018 23:09У меня в служебных скриптах такого полным полно (в смысле перебора, а не Москва | мОсква...). Например в привязке к проекту по имени VM тупо стоит куча if на перле. Что мне там, ассоциативный массив писать и шаблоны из него тащить? Надо будет, сделаем, пока не нужно... (НО правда я за объем кода не получаю, просто скрипты категории _раз написать и 100 раз заюзать и все..._)Prosche wrote: ↑09 Jan 2018 22:43Точно. Вот если бы в коде были кейсы для всех вариантов, мОсква, моСква и тп. Тогда да, немедленно снял бы шляпу.
Не красит вас это признание. Пишите шаблоны, используйте алгоритмы, вы увидите, вам понравится и это ремесленничество уйдет из вас. И код станет короче и красивее без всяких свитчей и ифов. Чесслово. Я не силен в шарпе, но вот пример того же кода, но case insensitive. Разве не коротко и читаемо?
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"; }
}
-
- Уже с Приветом
- Posts: 15526
- Joined: 27 Sep 2007 22:53
Re: Шедевр кода
Где грохнется вышепреведенный код будучи инициализированным
static IReadOnlyDictionary<string,string> v = new Dictionary<string, string>() {
{"МОСКВА","000000010"},
{"ХИМКИ", "000000193"},
{"МОСКВА","000000020"},
{"САНКТ-ПЕТЕРБУРГ","000000001"}
static IReadOnlyDictionary<string,string> v = new Dictionary<string, string>() {
{"МОСКВА","000000010"},
{"ХИМКИ", "000000193"},
{"МОСКВА","000000020"},
{"САНКТ-ПЕТЕРБУРГ","000000001"}
-
- Уже с Приветом
- Posts: 549
- Joined: 07 Jan 2016 13:04
Re: Шедевр кода
Предлагаю к обсуждению линейного и нелинейного программирования еще и целочисленное добавить, а то что-то мы без дискретки. Еще бывают смешанные модели, которые на практике обычно и приходится оптимизировать.
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Re: Шедевр кода
Еще помню, бывает ВЫПУКЛОЕ программирование
И главное, никакого отношения это к современному программированию не имеет
И главное, никакого отношения это к современному программированию не имеет
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Уже с Приветом
- Posts: 8090
- Joined: 08 Nov 2004 12:24
- Location: GA
Re: Шедевр кода
И? Грохнется он на первом же юнит тесте с красивым сообщением про дубликат. Если нет тестов, то при первом же старте программы. Разрабы ведь запусают то, что пишут, хоть раз.Мальчик-Одуванчик wrote: ↑10 Jan 2018 06:45 Где грохнется вышепреведенный код будучи инициализированным
static IReadOnlyDictionary<string,string> v = new Dictionary<string, string>() {
{"МОСКВА","000000010"},
{"ХИМКИ", "000000193"},
{"МОСКВА","000000020"},
{"САНКТ-ПЕТЕРБУРГ","000000001"}
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
-
- Уже с Приветом
- Posts: 20297
- Joined: 01 Dec 2003 23:16
- Location: Russia->USA
Re: Шедевр кода
ха. во первых не всегда. во 2-х запросто тесты могут не покрывать.Prosche wrote: ↑10 Jan 2018 14:41И? Грохнется он на первом же юнит тесте с красивым сообщением про дубликат. Если нет тестов, то при первом же старте программы. Разрабы ведь запусают то, что пишут, хоть раз.Мальчик-Одуванчик wrote: ↑10 Jan 2018 06:45 Где грохнется вышепреведенный код будучи инициализированным
static IReadOnlyDictionary<string,string> v = new Dictionary<string, string>() {
{"МОСКВА","000000010"},
{"ХИМКИ", "000000193"},
{"МОСКВА","000000020"},
{"САНКТ-ПЕТЕРБУРГ","000000001"}
кстати, помнится, в жабе ексепшен в статической инициализации (например создании объекта для статического поля) приводил к заявлению "класс не найден", что приводило в недоумении немало индусов... типа вот же он - класс в пути всё пучком, даже какой-то код инициализации может успеть выполнится и вдруг NoClassDefFoundError. Отсюда у меня некоторая нелюбовь к сколько-нибудь сложным действиям в процессе загрузки класса - обязательно кто-то дополнит и потом не сможет разобратся куда исчез класс который только-что был.
дот нет тут что-то менее лукавое выдаёт?
Говори что думаешь, думай что говоришь!
Маразм крепчал и скрепы гнулись
Маразм крепчал и скрепы гнулись
-
- Уже с Приветом
- Posts: 20297
- Joined: 01 Dec 2003 23:16
- Location: Russia->USA
Re: Шедевр кода
я в сишарпном синтаксисе не копенгаген, но если кто-то v = null; сделает, то GetCityCodeByCityName на все города будет выдавать "000000000" (как и на аргумент null )?Prosche wrote: ↑10 Jan 2018 03:19Code: 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"; } }
извиняюсь за глупый вопрос
Говори что думаешь, думай что говоришь!
Маразм крепчал и скрепы гнулись
Маразм крепчал и скрепы гнулись
-
- Уже с Приветом
- Posts: 8090
- Joined: 08 Nov 2004 12:24
- Location: GA
Re: Шедевр кода
Ну вы сравнили тоже... Прекрасный язык и жабу!geek7 wrote: ↑10 Jan 2018 16:28 ха. во первых не всегда. во 2-х запросто тесты могут не покрывать.
кстати, помнится, в жабе ексепшен в статической инициализации (например создании объекта для статического поля) приводил к заявлению "класс не найден", что приводило в недоумении немало индусов... типа вот же он - класс в пути всё пучком, даже какой-то код инициализации может успеть выполнится и вдруг NoClassDefFoundError. Отсюда у меня некоторая нелюбовь к сколько-нибудь сложным действиям в процессе загрузки класса - обязательно кто-то дополнит и потом не сможет разобратся куда исчез класс который только-что был.
дот нет тут что-то менее лукавое выдаёт?
Специально для вас запустил:
Думаю даже индусы бы дотумкали[System.ArgumentException: An item with the same key has already been added.]
at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
at Program..cctor() :line 6
-
- Уже с Приветом
- Posts: 8090
- Joined: 08 Nov 2004 12:24
- Location: GA
Re: Шедевр кода
Будет, что логично, нет словаря, нет и результата, но v приватный (по умолчанию в шарпе) член класса (я уж класс в примере не стал делать, но он есть ), т.е. изменить снаружи класса его нельзя. Можно конечно изнутри. Если это проблема, можно сделать интерфейс с гетером и обращаться через него, но это уже немного паранойя, потому что с таким же успехом враг может и просто саму функцию заменить:geek7 wrote: ↑10 Jan 2018 16:35я в сишарпном синтаксисе не копенгаген, но если кто-то v = null; сделает, то GetCityCodeByCityName на все города будет выдавать "000000000" (как и на аргумент null )?Prosche wrote: ↑10 Jan 2018 03:19Code: 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"; } }
извиняюсь за глупый вопрос
private static string GetCityCodeByCityName(string name)
{
return "000000000";
}
-
- Уже с Приветом
- Posts: 20297
- Joined: 01 Dec 2003 23:16
- Location: Russia->USA
Re: Шедевр кода
ну тут злой умысел будет налицо.. а вот если он таки сподобится загрузить список из какой-то базы/файла итд и катапейстнет свой IReadOnlyDictionary loadCityCodeByCityName() из Вашего примера string GetCityCodeByCityName() заменив catch { return "000000000"; } на catch { return null; } а к базе законектится в продакшене не получится...Prosche wrote: ↑10 Jan 2018 18:40Будет, что логично, нет словаря, нет и результата, но v приватный (по умолчанию в шарпе) член класса, т.е. изменить снаружи класса его нельзя. Можно конечно изнутри. Если это проблема, можно сделать интерфейс с гетером и обращаться через него, но это уже немного паранойя, потому что с таким же успехом враг может и просто саму функцию заменить:geek7 wrote: ↑10 Jan 2018 16:35я в сишарпном синтаксисе не копенгаген, но если кто-то v = null; сделает, то GetCityCodeByCityName на все города будет выдавать "000000000" (как и на аргумент null )?Prosche wrote: ↑10 Jan 2018 03:19Code: 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"; } }
извиняюсь за глупый вопрос
private static string GetCityCodeByCityName(string name)
{
return "000000000";
}
то имеем "всё работает в деве, в продакшене все города возвращают "000000000"" и 2 проглоченные эксепшены - одна индусом о коннекте к базе, другая Вами о налпойнтере....как-то так
короче: булет-пруфт код тоже может оказатся неполезным
PS Я правильно понимаю, что в Вашем варианте Dictionary вернёт null на город "зажопинск", а Димин пример "000000000" ? а если у них юнит-теста на несуществующий город нет?
PPS вот глянул на свою писанину.. и возникло ощущение что я фалометрией занялся хотя, вроде, на этот сравнительный анализ органов глубоко плевать и цели такой небыло.... и вообще что-то в последнее время на кодирование и не стоит
Говори что думаешь, думай что говоришь!
Маразм крепчал и скрепы гнулись
Маразм крепчал и скрепы гнулись
-
- Уже с Приветом
- Posts: 8090
- Joined: 08 Nov 2004 12:24
- Location: GA
Re: Шедевр кода
Да, такое же ощущениеgeek7 wrote: ↑10 Jan 2018 18:55 ну тут злой умысел будет налицо.. а вот если он таки сподобится загрузить список из какой-то базы/файла итд и катапейстнет свой IReadOnlyDictionary loadCityCodeByCityName() из Вашего примера string GetCityCodeByCityName() заменив catch { return "000000000"; } на catch { return null; } а к базе законектится в продакшене не получится...
то имеем "всё работает в деве, в продакшене все города возвращают "000000000"" и 2 проглоченные эксепшены - одна индусом о коннекте к базе, другая Вами о налпойнтере....как-то так
короче: булет-пруфт код тоже может оказатся неполезным
PS Я правильно понимаю, что в Вашем варианте Dictionary вернёт null на город "зажопинск", а Димин пример "000000000" ? а если у них юнит-теста на несуществующий город нет?
PPS вот глянул на свою писанину.. и возникло ощущение что я фалометрией занялся хотя, вроде, на этот сравнительный анализ органов глубоко плевать и цели такой небыло.... и вообще что-то в последнее время на кодирование и не стоит
В своем примере я не менял не входящие не выходящие значения, а оставил как у Димы, на входе город, на выходе код или "0000000" если не найден. По уму я бы конечно исходил из задачи, если есть шанс, что словарь не захардкожен, а грузится и может быть поврежден, сделал бы проверку, возможно в функции, возможно в конструкторе, исходя из логики загрузки. Если не найденный город плохо, то вместо return "0000000" бросал бы эксепшн и т.д. Идея была показать, что решение со словарем ничуть не длиннее, не сложнее, не... в общем лучше всяких ифов и свитчей:)
-
- Уже с Приветом
- Posts: 15526
- Joined: 27 Sep 2007 22:53
Re: Шедевр кода
Мне не нравится само провоцирование на генерацию исключения.
Собственно, исключения предназначены для обработки нештатных ситуаций, а в вышепреведенном примере обычная рутина приводит к генерации и обработке исключения, без чего можно прекрасно обойтись. К примеру, в плюсах подобные примеры, наоборот приводятся как образчик того, что настойчиво рекомендуется избегать.
Собственно, исключения предназначены для обработки нештатных ситуаций, а в вышепреведенном примере обычная рутина приводит к генерации и обработке исключения, без чего можно прекрасно обойтись. К примеру, в плюсах подобные примеры, наоборот приводятся как образчик того, что настойчиво рекомендуется избегать.
-
- Уже с Приветом
- Posts: 8090
- Joined: 08 Nov 2004 12:24
- Location: GA
Re: Шедевр кода
Согласен. Только надо брать во внимание, что в плюсах исключение это абнормальная ситуация, в силу оверхеда на размер и производительность их там вообще лучше не использовать без крайней нужды, фактически исключение в плюсах это аппликация валиться и перед смертью мы пытаемся чтото спасти или зафиксировать в журнале, в шарпе же это вполне рабочий инструмент и уж точно прекрасно подходит для случая когда у нас поломан классификатор или пришли данные которых мы не ждем.Мальчик-Одуванчик wrote: ↑10 Jan 2018 20:49 Мне не нравится само провоцирование на генерацию исключения.
Собственно, исключения предназначены для обработки нештатных ситуаций, а в вышепреведенном примере обычная рутина приводит к генерации и обработке исключения, без чего можно прекрасно обойтись. К примеру, в плюсах подобные примеры, наоборот приводятся как образчик того, что настойчиво рекомендуется избегать.
-
- Уже с Приветом
- Posts: 15526
- Joined: 27 Sep 2007 22:53
Re: Шедевр кода
В плюсах - это как раз именно обработка нештатных ситуаций, связанных с потерей соединения, нехваткой памяти или выходу за ее границы, отказу оборудования, ошибками ввода-вывода и прочим. Валиться при этом необязательно и обычно работа продолжается с ограниченным необходимым функционалом. Более того - приложения чаще всего и проектируются, чтобы продолжать работать с базовым функционалом, принеся в жертву второстепенный или временно ограничив производительность. То что вы описали больше напоминает необработанное на нужном уровне исключение, прорвавшееся на самый верх, когда все что с ним можно сделать - это что-то спасти перед тем как отстрелиться.
-
- Уже с Приветом
- Posts: 8090
- Joined: 08 Nov 2004 12:24
- Location: GA
Re: Шедевр кода
Я живу в мире эмбеддед, у нас исключения применяются так, как я описал. Плюсы в менее требовательной среде могут использовать исключения более свободно, так что соглашусь с вами.
-
- Уже с Приветом
- Posts: 803
- Joined: 24 Jan 2007 07:32
- Location: Сергели->Новосибирск->SFBA->Новосибирск->Москва->NY->SFBA
Re: Шедевр кода
То что можно использовать исключения никто не спорит. Но нужно ли?Prosche wrote: ↑10 Jan 2018 21:17 К примеру, в плюсах подобные примеры, наоборот приводятся как образчик того, что настойчиво рекомендуется избегать.
Согласен. Только надо брать во внимание, что в плюсах исключение это абнормальная ситуация, в силу оверхеда на размер и производительность их там вообще лучше не использовать без крайней нужды, фактически исключение в плюсах это аппликация валиться и перед смертью мы пытаемся чтото спасти или зафиксировать в журнале, в шарпе же это вполне рабочий инструмент и уж точно прекрасно подходит для случая когда у нас поломан классификатор или пришли данные которых мы не ждем.
Почему вы думаете что область применения исключений в С++ и C# должно отличаться?
Одной из причин появления исключений в C++ изначально являлась генерация ошибки в конструкторе по разным причинам.
В примере вполне можно без исключений обоитись проверяя наличие значения в словаре и проверяяя ключ на null.
Спи быстрее, твоя подушка нужна другому. Copyright Зощенко
-
- Уже с Приветом
- Posts: 20297
- Joined: 01 Dec 2003 23:16
- Location: Russia->USA
Re: Шедевр кода
Говори что думаешь, думай что говоришь!
Маразм крепчал и скрепы гнулись
Маразм крепчал и скрепы гнулись
-
- Уже с Приветом
- Posts: 15526
- Joined: 27 Sep 2007 22:53
Re: Шедевр кода
C трудом представляю как там вообще можно пользоваться шарпом, где одна среда исполнения весит немеряно.
Обычно при программировании встроенного железа исключения вообще отрубают нафиг на этапе компиляции.
-
- Уже с Приветом
- Posts: 3000
- Joined: 14 Apr 2004 01:11
- Location: SFBA (было: Минск, Беларусь)
Re: Шедевр кода
Нет, ни в коем случае. В плюсах исключения - обработка нештатных ситуаций, т.е. ошибок, но совсем не обязательно связанных с "аппликация валиться и перед смертью". Вся философия исключений в С++ построена вокруг идеи того, что исключения являются recoverable. "Перед смертью" - это скорее подыерархия logical errors. Когда же речь идет о подыерархии runtime errors, никакого "перед смертью" не подразумевается.
А уж вопрос о том, является ли каждая конкретная нештатная ситуация поводом для выбрасывания исключения или нет - это неоднозначный вопрос дизайна, стоящий одинаково во всех языках программирования. Вплоть до реализации обеих возможностей, как это сделано в стандартных потоках ввода-вывода в С++.
Best regards,
Андрей
Андрей