- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
public class Settings {
public static String CURRENCY = "руб.";
public static void setCurrency(String currency) {
CURRENCY = currency != null ? currency : "руб.";
}
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+78
public class Settings {
public static String CURRENCY = "руб.";
public static void setCurrency(String currency) {
CURRENCY = currency != null ? currency : "руб.";
}
}
Мой проект. Можно ли считать это ГК?
roman-kashitsyn 11.08.2011 10:40 # +19
tir 11.08.2011 10:42 # −6
foGa 11.08.2011 10:43 # +2
по коду будет верна, а по смыслу - нет.
Да и у одной и той же валюты может быть несколько обозначений ("р.", "руб.", "рубль").
foGa 11.08.2011 10:51 # +1
roman-kashitsyn 11.08.2011 10:51 # +2
tir 11.08.2011 10:54 # 0
roman-kashitsyn 11.08.2011 10:59 # 0
а вообще имеет смысл изучить java i18n and l10n api:
http://download.oracle.com/javase/1.4.2/docs/api/java/util/Currency.html
tir 11.08.2011 11:01 # 0
gegMOPO4 11.08.2011 11:09 # 0
tir 11.08.2011 11:11 # 0
tir 11.08.2011 12:56 # 0
gegMOPO4 11.08.2011 16:50 # +3
Не говоря уже о сомнительности нужности такого поля, вместо уже упомянутых стандартных средств. Но это зависит.
Nicklasos 11.08.2011 11:50 # 0
Fai 11.08.2011 13:50 # −3
roman-kashitsyn 11.08.2011 15:14 # 0
This is obvious 11.08.2011 16:37 # +1
Lure Of Chaos 11.08.2011 13:52 # 0
Fai 11.08.2011 14:01 # 0
Вот делать нам нечего валюту нулом выворачивать. Имхо лучше перегрузка.
tir 11.08.2011 14:15 # 0
Fai 11.08.2011 14:43 # −2
tir 11.08.2011 14:59 # 0
Fai 11.08.2011 15:23 # 0
Lure Of Chaos 11.08.2011 15:31 # +2
в огромных корпоративных приложениях, где коду за 30 лет, нельзя уследить за всеми трансформациями, придет нулл или нет.
проще в одном месте поставить проверку, нежели по 1000 местам дрожать, не пойдет ли нулл.
roman-kashitsyn 12.08.2011 08:37 # 0
CPPGovno 12.08.2011 09:46 # 0
C# автоматически кидает NullReferenceException, если кто-то пытается обратиться к нулёвой ссылке
Lure Of Chaos 12.08.2011 10:08 # 0
CPPGovno 12.08.2011 12:47 # −1
Lure Of Chaos 12.08.2011 12:49 # 0
CPPGovno 12.08.2011 12:59 # −1
Lure Of Chaos 12.08.2011 13:00 # 0
CPPGovno 12.08.2011 13:02 # 0
- NullPointerException
Что я должен был подумать, пусть даже и в топике Java раздела?
Lure Of Chaos 12.08.2011 13:04 # 0
- java проглатывает нули?
- NullPointerException
dnalchemist 09.09.2015 09:07 # 0
kegdan 09.09.2015 10:38 # +1
3_14dar 09.09.2015 21:34 # 0
3_14dar 09.09.2015 21:34 # 0
tir 11.08.2011 16:29 # 0
Проект пишу один, и в ближайшее время новых людей не будет. Проект - толстый клиент, выполняющий кое-какие расчеты. Пишу уже полгода.
В системе потихоньку начинает возникать потребность в конфигурации, но как она должна выглядеть и как должна быть реализована на данный момент не до конца понятно.
Поставили задачу: в проекте должна быть возможность конфигурирования валюты (сейчас только рубли). Замечу, что настройка исключительно для пользовательского интерфейса, т. к. никакой мультивалютности в программе нет.
В итоге, было принято решение делать это обычной стрингой, т. к. дает достаточно много плюсов:
- пользователь может сам задать в каком он виде хочет видеть валюту (USD, $, р., руб., грн.).
- получаем дополнительную гибкость, т. к. ничто не обязывает использовать валюты. Например, можно задать у. е., или даже баллы.
В толстом клиенте был сделан обычный комбобокс с наиболее часто используемыми вариантами (3-4 значения), а также с возможностью ввода своего значения.
Теперь по реализации.
Так как полноценного конфига у меня нет (см. выше), то было принято решение использовать глобальную переменную - как наиболее быстрый вариант.
1. Почему поле, а не геттер?. По мне, Settings.CURRENCY выглядит лучше и короче, чем Settings.getCurrency(). В конце-концов, когда надо будет заменить Settings.CURRENCY на Settings.getCurrency проблем не возникнет, ибо любая IDE сможет провести такой рефакторинг.
2. Почему поле назвал CURRENCY, а не currency? Чтобы лишний раз подчеркнуть, что значение используется как константа, не подразумевает модификации. У меня, как я думаю и у любого нормального java-кодера, не возникает желания что-нить присваивать чему-то, что написано БОЛЬШИМИ буквами. Вряд ли вы спешите что-нить присвоить SomeClass.SOMETHING. И вряд ли вы смотрите стоит ли там final или нет.
tir 11.08.2011 16:29 # +1
4. Почему проверка на null? Использую jpa/hibernate, добавил колонку, гибер сам ее создаст в базе. @Column(columnDefinition="...") не люблю использовать, т. к. там надо полностью прописывать sql по созданию колонки, а другого способа задать дефолтное значение вроде как нет. Поэтому, после обновления у клиентов в колонке окажется null.
Вот собсна и все. Рабочее решение, полностью удовлетворяющее текущие потребности, было реализовано за 30 минут. Никакой дополнительной архитектуры (классов, интерфейсов) притянутой за уши не потребовалось. Когда в программе появится полноценный конфиг - тогда все на него и переведется, причем без особых усилий.
Подытоживая выше сказанное: очень сложно судить о качестве кода, когда ты не в контексте. Нельзя придираться к коду только за то, что он нарушает какие-то каноны (public fields, глобальные переменные, именование и т. п.). Надо быть проще, оверинжиниринг еще никому на пользу не шел.
П. С. Не будте разъяренными обезьянами =) (взято из книги Нил Форд "Продуктивный программист. Как сделать сложное простым, а невозможное - возможным")
Lure Of Chaos 11.08.2011 16:50 # 0
tir 11.08.2011 17:04 # 0
Lure Of Chaos 11.08.2011 17:05 # 0
tir 11.08.2011 17:06 # 0
Lure Of Chaos 11.08.2011 17:11 # +1
tir 11.08.2011 17:16 # 0
Lure Of Chaos 11.08.2011 17:18 # 0
break;
tir 11.08.2011 17:19 # 0
так будем присваивать? да/нет
Lure Of Chaos 11.08.2011 17:21 # 0
setSomething(x) - да!
tir 11.08.2011 17:26 # 0
Lure Of Chaos 11.08.2011 17:28 # 0
tir 11.08.2011 17:35 # 0
roman-kashitsyn 11.08.2011 17:37 # +1
tir 11.08.2011 17:45 # 0
Fai 11.08.2011 17:55 # +1
Убери сеттер НАХУЙ, или сделай уже геттер, а поле в private!
Lure Of Chaos 11.08.2011 18:13 # 0
чел просто упертый баран,мол, "это мой код, и я хочу писать его через жопу, лишь бы сэкономить пару байт и наносекуд, а если бы это был не мой код, я бы подумал"
tir 11.08.2011 18:16 # 0
tir 11.08.2011 18:15 # 0
Lure Of Chaos 11.08.2011 18:22 # +5
вы, наверное, не очень опытный программист... Вас будет жалко потом, когда вы будете гулять по заботливо положенным собой же граблям.
tir 11.08.2011 18:54 # 0
roman-kashitsyn 11.08.2011 21:46 # +5
ох, как всё запущено... да нет никаких злоебучих правил, есть только инструменты и умение программиста их использовать. Вы, к примеру, пытаетесь ввернуть в стену гвоздь отвёрткой и радуетесь, что Вам такое пришло в голову, а все вокруг - унылое гавно, заворачивающее шурупы шуруповёртом.
tir 11.08.2011 22:49 # 0
roman-kashitsyn 11.08.2011 23:21 # +4
tir 11.08.2011 23:58 # −4
По делу. Если честно - ничего толкового из вышесказанного я не увидел.
Был вариант от foGa (по ТЗ не прокатит), от вас с вводом интерфейса (я бы глянул на него) или юзания стандартных средств (не подойдут). Была рекомендация ввести геттер вместо поля. Я объяснил в пункте 1 почему использую поле.
gegMOPO4 предложил ввести константу DEFAULT_CURRENCY. Ну, может быть стоит.
Вот и все. Фактически два варианта:
- Ну уж если это класс с настройками, то он должен знать обо всех значениях, какие ему можно присвоить. Точнее сказать, он должен знать у какого класса можно спросить эти значения (а еще возможно и на каком языке)
- Ну ведь логично было бы сделать интерфейс Currency с методами типа getSymbol(), getShortName() и getFullName() и enum с реализациями этого интерфейса, а в конфиге хранить текущую реализацию интерфейса
Если объясните как они будут заинтегрированы и чем они лучше, буду очень признателен. Хотите поговорить про ваш вариант? Я буду просто задавать вопросы, а вы отвечать =)
CPPGovno 12.08.2011 00:37 # −1
foGa 12.08.2011 05:23 # 0
tir 12.08.2011 07:37 # 0
foGa 12.08.2011 07:55 # −1
Как-то это некошерно. Но если уж надо, то кто мешает добавить еще пару методов типа
roman-kashitsyn 12.08.2011 08:33 # +2
foGa 12.08.2011 08:47 # 0
Не обязаны. Вот static они факт должны быть (так и есть), а вот immutable нифига. Мож у меня конфиг в процессе работы приложения будет расширяться в рамках данной сессии.
roman-kashitsyn 12.08.2011 08:58 # +2
roman-kashitsyn 12.08.2011 07:58 # 0
Так никто не будет завязан на ограниченный набор валют и сможет писать собственные реализации.
А вообще я думаю, что любые конфиги на клиенте должны отражать специфику его машины: URL для соединения с сервером, прокси сервера, предпочитаемые размеры окон, настройки логгирования. Валюты же - часть предметной области (вероятно, аттрибуты операций) и, скорее всего, должны храниться в БД. Но я не знаю деталей вашей работы и меня нет ни времени, ни желания разбираться глубже.
foGa 12.08.2011 08:02 # 0
roman-kashitsyn 12.08.2011 08:35 # 0
foGa 12.08.2011 08:44 # −1
tir 12.08.2011 08:53 # 0
enum Currency {
RUB("руб.", "рубль", "р."),
EUR("eur", "евро", "не р.");
private String name_short;
private String name_long;
private String default_short_name;
Currency(String name_short, String name_long, String default_short_name) {
this.name_short = name_short;
this.name_long = name_long;
this.default_short_name = default_short_name;
}
public String getSortName() { return this.name_short; };
public String getLongName() { return this.name_long; };
public void setSortName(String name_short) { this.name_short = name_short; };
public void setLongName(String name_long) { this.name_long = name_long; };
public void setDefaultShortName() {
setShortName(this.default_short_name);
}
}
setDefaultShortName - не самое удачное этого название метода, лучше было бы что-нить в стиле restoreDefaultShortName.
Вообще для моего случая данная реализация не подходит.
foGa 12.08.2011 08:58 # 0
>Вообще для моего случая данная реализация не подходит.
Ждем нового говнокода вашей реализации
tir 12.08.2011 09:02 # 0
Ключевая фраза "через GUI", пользователь приложения не будет править код.
П. С. Почему все фразу "не подходит" воспринимают как "ваш код говно"? Я ничего не говорил про код, все что я сказал, что он не подойдет.
Lure Of Chaos 12.08.2011 11:04 # 0
тем более, что без отражения их в джаве нельзя расширять
tir 12.08.2011 11:23 # 0
Lure Of Chaos 12.08.2011 11:30 # +1
В Модели же для хранения достаточно будет простого поля String currency; c аксессорами и списка вариантов List<String>, который можно будет сохранять и дополнять - по желанию.
кроме того, лучше Модель сделать сериализуемой, тогда ее будет очень просто сохранять и загружать.
tir 12.08.2011 11:36 # 0
Как организовать доступ к этому значению из произвольного места в приложении?
Lure Of Chaos 12.08.2011 11:41 # +1
public String getCurrency() {return this.currency;}
public void setCurrency(String currency) {this.currency=currency;}
хотя лично мне еще нравится и "краткая" форма аксессоров:
public String currency(){return this.currency;}
public Settings currency(String currency){this.currency=currency;return this;}
tir 12.08.2011 11:45 # 0
Lure Of Chaos 12.08.2011 11:46 # 0
tir 12.08.2011 11:47 # 0
Lure Of Chaos 12.08.2011 11:53 # 0
tir 12.08.2011 11:56 # 0
Lure Of Chaos 12.08.2011 12:00 # 0
tir 12.08.2011 12:02 # 0
Lure Of Chaos 12.08.2011 12:35 # 0
guest 12.08.2011 12:45 # 0
Lure Of Chaos 12.08.2011 12:47 # 0
кстати, и для общего развития в AOP не мешало бы нос сунуть
guest 12.08.2011 12:52 # 0
Lure Of Chaos 12.08.2011 12:56 # 0
tir 12.08.2011 12:48 # −1
Класс больше месяца не проживет.
Вы по прежнему считаете, что в моем случае надо реализовать полноценный синглтон с полноценными названиями методов?
И везде в коде иметь Settings.getInstance().getCurrency() вместо Settings.CURRENCY?
Lure Of Chaos 12.08.2011 12:52 # 0
тогда фтопку пляски с бубном, конечно.
А если писать реюзабельный код - тогда, бесспорно, Settings.getInstance().getCurrency()
эм, еще вопрос - у вас в классе Settings только одно поле CURRENCY?
tir 12.08.2011 12:55 # 0
Lure Of Chaos 12.08.2011 12:58 # 0
именно так. сложно сказать, как лучше, не видя кода в глаза
tir 12.08.2011 13:08 # 0
Lure Of Chaos 12.08.2011 13:20 # +1
1. ЗАГЛАВНЫМИ буквами следует называть только статические финальные поля, т.е. константы. Которые в коде НИКОГДА, ни через какие сеттеры, не меняются. Так привычно и всем, и мне же - исключения из правил очень легко забываются
2. Если нам не нужно контролировать доступ к обьекту(полю), его можно сделать публичным, но при этом иметь ввиду, что он в любой момент сможет держать некорректное значение
2.1. Иначе обязательно пользоваться инкапсуляцией
3. Нельзя доверять никому, в т.ч. себе, т.к.:
3.1.сложность проекта возрастет, дебаг станет мучительным
3.2.память человеческая коротка, к тому же все мы меняемся.
3.3.я не смогу код использовать повторно в других проектах или
3.4.отдать кому-то на поддержку или доработку
tir 12.08.2011 13:27 # 0
но, вы по прежнему считаете, что код говно или уже так не уверены, зная теперь о коде чуть больше: для чего он, как он появился, какую задачу решает и сколько по времени будет жить?
хочу короткий ответ:
"да" - по прежнему считаю что гавно,
"нет" - в свете дополнительно полученной информации в ДАННОМ случае такой код допустим.
Lure Of Chaos 12.08.2011 13:41 # +4
далее видно, что непонятно ))
> хочу короткий ответ
экий вы максималист!
ДА, код говно
и я бы никогда не стал так делать, а лучше бы чуть подумал о других решениях, об изменении в архитектуре, ибо
ЕСЛИ ГОВНЯНОЕ РЕШЕНИЕ В ПРИЛОЖЕНИИ ВЫГЛЯДИТ ЛУЧШИМ, ЭТО ЗНАЧИТ, ЧТО ГОВНО ДАЛЕЕ, В АРХИТЕКТУРЕ
но: в ДАННОМ случае программирую не я, а вы, и вы же все равно сделаете по своему, и вам же потом расхлебывать
п.с. я бы никогда не взял ваш код на поддержку, "в свете дополнительно полученной информации" о том, что вы прибегаете к таким нестандартным решениям,
в ходе которых мне пришлось бы ломать голову, что вы здесь имели ввиду, и на каждой строчке спрашивать вас, а можно ли так делать, ничего не поломав
tir 12.08.2011 15:07 # −3
Не лучшим, а обоснованым. Я нигде ни слова не написал, что это крутое решение. Что это единственное правильное решение. Я говорил лишь то, что это - приемлемое решение.
> и я бы никогда не стал так делать
т. е. то что вы писали в постах выше - это вам на ухо нашептали?
Lure Of Chaos 12.08.2011 15:09 # 0
CPPGovno 12.08.2011 17:51 # 0
Не нужно кричать. Мы вас слышим.
tir 12.08.2011 08:42 # 0
CPPGovno 12.08.2011 00:48 # 0
Я в своём паскале или бейсике в лёгкую присвою в SOMETHING новое значение. У меня руки чешутся сделать какую-нибудь гадость, если это не запрещено.
roman-kashitsyn 11.08.2011 17:13 # 0
tir 11.08.2011 17:15 # 0
Lure Of Chaos 11.08.2011 17:19 # 0
tir 11.08.2011 17:34 # −1
roman-kashitsyn 11.08.2011 17:40 # +2
tir 11.08.2011 17:44 # −2
Во-вторых. По вашему лучше что-то придумать, нах..чить кучу кода, чтобы потом все равно его переписывать?
Lure Of Chaos 11.08.2011 17:45 # +1
вы как раз этим и занимаетесь.
tir 11.08.2011 17:49 # 0
Lure Of Chaos 11.08.2011 17:57 # 0
tir 11.08.2011 18:12 # −1
Lure Of Chaos 11.08.2011 18:18 # +2
вон, многие тоже думали, что никто не будет лазать по "секретным" урлам, а Яндекс взял, и проиндексировал все к чертовой матери.
в книге "Code Craft" даже отдельная глава была: не делайте предположений!
Если есть возможность сделать нехорошую вещь, будьте уверены, что вы сами или кто-то другой ее сделает. Сделайте, что бы вы НЕ МОГЛИ сделать глупость, позже не раз порадуетесь
tir 11.08.2011 18:53 # −3
Lure Of Chaos 11.08.2011 19:13 # +1
А, в принципе, и чужими, если код придется допиливать кому-то другому.
tir 11.08.2011 19:26 # −3
JavaBeans, к примеру, групповая привычка. Причем почти никто не знает почему надо делать именно так, но все так делают.
И еще. У меня имена всех тестовых методов в юнит тестах написаны в руби-стиле: маленькими буквами через подчеркивание. Мне, как я полагаю, положен расстрел за такие святотатства!
С другой стороны: что легче читать?
authorNameShouldBeSpecified
или
author_name_should_be_specified
Fai 11.08.2011 19:41 # +4
tir 11.08.2011 19:49 # −2
absolut 11.08.2011 19:58 # +1
roman-kashitsyn 11.08.2011 21:41 # +1
Не надо обвинять всех в собственных грехах. Почитайте Core Java для начала, если не знаете, зачем нужны соглашения JavaBeans.
> С другой стороны: что легче читать?
в контексте наличия в Java поддержки пространств имён в виде пакетов и классов оба имени - гавно. Больше двух-трёх слов в имени переменной практически никогда не нужно.
tir 11.08.2011 22:43 # 0
если бы вы внимательно прочитали написанное, то вы бы увидели " имена всех тестовых МЕТОДОВ".
Насчет JavabBeans. Для многих JavaBeans не более чем: если есть поле, то для чтения использовать getField, для записи использовать setField(value).
roman-kashitsyn 11.08.2011 23:11 # 0
для которых класс является пространством имён, а для класса пространством имён является пакет
> для многих JavaBeans не более чем
Не любого более-менее квалифицированного Java-программиста JavaBeans - технология, включающая помимо соглашений об именовании (обычных и boolean полей, полей - массивов) механизмы интроспекции, редакторов свойств, событий смены состояния, интеграции с IDE и ещё очень много всего. Просто в промышленности из всего многообразия лучше всего прижились соглашения именования.
tir 11.08.2011 23:31 # 0
Из-за этой фразы я сделал акцент на слове "методов". Насчет имени переменной длинее 2-3 слов - соглашусь. Насчет названия тестового метода - не соглашусь. Думаю этот вопрос можно закрыть.
Насчет JavaBeans. Хорошо сказали =) Боюсь, что здесь все считают, что они как минимум "более-менее квалифицированные программисты". Надеюсь, ваш ответ подскажет некоторым из них куда надо посмотреть для общего развития. =)
Вопрос также закрыли, а то что-то от темы отошли.
gegMOPO4 11.08.2011 16:52 # 0
roman-kashitsyn 11.08.2011 16:56 # +3
tir 11.08.2011 17:03 # −3
Пример я привел лишь для того, чтобы показать, что каждый шаг был обдуман и обоснован.
Lure Of Chaos 11.08.2011 17:06 # +4
встречаются и от Дьявола = )
Fai 11.08.2011 17:59 # −2
Lure Of Chaos 11.08.2011 18:00 # +2
Fai 11.08.2011 20:25 # 0
inkanus-gray 11.08.2011 20:03 # 0
Lure Of Chaos 11.08.2011 20:21 # 0
Fai 11.08.2011 20:27 # +6
http://ru.wikipedia.org/wiki/Русский_алгоритмический_язык
inkanus-gray 11.08.2011 20:44 # 0
CPPGovno 12.08.2011 00:43 # 0
SmackMyBitchUp 13.08.2011 11:41 # 0
SmackMyBitchUp 11.08.2011 23:11 # +3
zooz13 12.08.2011 00:38 # +5
bugmenot 12.08.2011 02:33 # 0
tir 12.08.2011 08:04 # −4
Я всего лишь хотел показать, что не всегда то, что на первый взгляд выглядит говном - действительно говно. Часто незнание контекста позволяет кричать, что код говно. Я, например, редко ставлю +/- в темах, т. к. однозначно определить качество кода чаще всего достаточно тяжело. А ставить "+" или "-" без аргументации - это несерьезно. А когда просишь объяснить или сказать конкретно как надо - все сводится к увиливаниям и всячески отмазкам.
>Какая вам суть разница, если вы тут...
Мне и нет никакой разницы =) Все это постилось только ради см. выше
>И на каждую уместную или не уместную попытку сказать вам, что же не так в вашем коде
Дайте пж номера комментов с уместными попытками, хотя бы парочку. Буду очень признателен.
roman-kashitsyn 12.08.2011 08:46 # +3
Думаю, у вас это ни разу не получилось. Со временем и у вас произойдёт эволюция от "Бля, какой заебатый код я написал: теперь всё работает и всё, сука, так запутанно, я тащусь!" до "Фуф, надеюсь, теперь этот код поймёт даже дебил".
tir 12.08.2011 09:29 # −1
Проблема более-менее квалифицированного программиста в том, что он умный. И из-за этого ума он часто не видит простых решений, ему сразу видятся иерархии, он видит это в объектах, он уже видит архитектуру. И часто он ее внедряет. Он просто разучился думать просто. Ему обязательно надо чтобы было ООП, и максимальная гибкость для будущих поколений. Чтобы все конфигурялось вдоль и поперек, чтобы все расширялось без геммороя. Именно более-менее квалифицированый программист чаще всего при простой задаче "добавить возможность задавать мобильный телефон для клиента" сделает не такую реализацию:
class Person {
...
private String mobilePhoneNumber;
...
}
а такую:
class Person {
...
private List<Phone> phones;
...
}
class Phone {
private PhoneType type;
private String phoneNumber;
private String notes;
}
enum PhoneType {
MOBILE, HOME, WORK
}
потому что он уверен, что эта гибкость пригодится в будущем: ведь теперь можно задавать несколько телефонов разного типа да еще оставлять примечания для каждого из них!
Проблема в том, что в 90% это не нужно, а сопровождать это приходится. Причем согласитесь, что с 1-й реализации перейти на 2-ю не представляет особого труда. Самое интересное, что до 2-й реализации скорее всего дело никогда и не дойдет.
roman-kashitsyn 12.08.2011 09:51 # +2
ООП и Java не пуп земли. Для многих задач python или ФЯП подходят лучше, чем Java.
tir 12.08.2011 10:04 # −3
>и программного инженера, который всегда выбирает наиболее с его точки зрения подходящие для работы инструменты и модели
не поверите - я их и выбрал. А вы почему-то считаете, что я неопытный программист, который наворотил говна и пытается вам доказать, что написал идеальный код =)
roman-kashitsyn 12.08.2011 10:10 # +2
И, судя по всему, не я один так считаю. Может, стоит задуматься об этом?
tir 12.08.2011 11:26 # −3
SmackMyBitchUp 13.08.2011 11:43 # 0
Fai 13.08.2011 12:14 # +2
inkanus-gray 13.08.2011 12:22 # +4
Fai 13.08.2011 12:27 # 0
SmackMyBitchUp 15.08.2011 12:03 # 0
Lure Of Chaos 12.08.2011 10:56 # +2
А профессиональный программист свято следует заповеди "НЕ усложняй (без надобности)".
tir 12.08.2011 11:31 # 0
Lure Of Chaos 12.08.2011 11:34 # 0
tir 12.08.2011 11:39 # 0
> нужно подбирать наиболее подходящее решение
именно этой мыслью я и закончил свой пост
Lure Of Chaos 12.08.2011 11:43 # 0
roman-kashitsyn 12.08.2011 09:55 # +2
Кстати, ГК - не лучшее место для демонстраций и доказательств. Сюда люди приходят поржать и расслабиться, а не читать "многабукаффные" рассуждения о мотивах, которые подвинули вас на говнокод.
tir 12.08.2011 10:15 # −6
roman-kashitsyn 12.08.2011 10:27 # +4
tir 12.08.2011 11:08 # −3
roman-kashitsyn 12.08.2011 11:12 # +2
tir 12.08.2011 11:22 # −3
roman-kashitsyn 12.08.2011 11:29 # +3
tir 12.08.2011 11:32 # 0
bugmenot 12.08.2011 11:03 # +4
Lure Of Chaos 12.08.2011 11:11 # 0
tir 12.08.2011 11:18 # −1
А вообще - я несу добро, и буду активно пропагандировать отвечать за свои слова! =)
SmackMyBitchUp 16.08.2011 15:50 # +1
CPPGovno 12.08.2011 01:21 # −5
Да, за такое поведение - жизнь карает, но он пока молод и этого не знает.
Из него выйдет хороший программист и человек в будущем, но пока он наступит на все грабли, что только найдёт, тк учится не на чужих ошибках, а на своих.
Он хочет докопаться до сути вещей самостоятельно и дать своё предположительное объяснение происходящему, а не поверить голословно миру или следовать общепринятым правилам и все подряд бездумно копировать.
Через какое то время он сможет самостоятельно предсказывать последствия любых действий (в различных областях) и поступков с большой точностью и почти перестанет наступать на грабли, но пройдет ещё много времени и граблей.
ПС: А ещё он дрочет. Это одна из черт самодостаточности. Любая мания величия или независимости от общества подкрепляется этим "пороком".
roman-kashitsyn 12.08.2011 08:50 # −1
Все дрочат
http://mf0.me/wps/2009/10/06/onanizm/
guest 12.08.2011 12:53 # 0
Спс, кэп. Может на этом основании автор пасты и сделал вывод)
Lure Of Chaos 12.08.2011 10:51 # 0
типичное поведение подростка, который пытается быть "не как все", а в итоге сваливается в кучу "всех".
особенно вредно сначала привыкнуть что-то так делать, потом пойти вразрез с привычкой, потом опять делать по-старому (заставят же). А потом открыть код и смотреть в него как баран на новые ворота: "какого хера не работает??"
guest 12.08.2011 12:54 # 0
Что то кэпов последнее время развелось. Или вы хотите намекнуть, что tir подросток?
Lure Of Chaos 12.08.2011 12:57 # 0
CPPGovno 12.08.2011 17:53 # −1
tir 12.08.2011 11:29 # −2
если в обществе принято жрать говно, я НЕ СОГЛАСЕН СЛЕПО КОПИРОВАТЬ от общества.
roman-kashitsyn 12.08.2011 11:45 # +3
tir 12.08.2011 12:18 # −2
roman-kashitsyn 12.08.2011 12:29 # +3
tir 12.08.2011 12:48 # −3
roman-kashitsyn 12.08.2011 14:09 # +3
tir 12.08.2011 14:27 # −4
absolut 12.08.2011 15:19 # +4
а понято сколько раз?
roman-kashitsyn 12.08.2011 15:33 # 0
почитано, но не прочитано.
CPPGovno 12.08.2011 12:56 # −1
Я это в пасте уже написал.
guest 12.08.2011 13:06 # +1
Lure Of Chaos 12.08.2011 13:29 # +3
формулируя иначе, он же скомбинировал разные подходы в одном,
1. выложил это на ГОВНОКОД(!), расписавшись при этом, что сделал говно
2. и с пеной у рта стал всем доказывать, что это решение оправдано, т.е. дрочить на него = )
roman-kashitsyn 12.08.2011 14:09 # +2
Lure Of Chaos 12.08.2011 14:43 # 0
это называется "психологический вампиризм"
tir 12.08.2011 15:00 # −2
Если вы испытываете раздражение - у вас комплекс. Займитесь самоанализом. Причина раздражения всегда находится внутри нас.
roman-kashitsyn 12.08.2011 15:35 # +3
Fai 12.08.2011 15:46 # +2
tir 12.08.2011 16:05 # −2
roman-kashitsyn 12.08.2011 16:25 # 0
tir 12.08.2011 16:27 # −1
roman-kashitsyn 12.08.2011 16:34 # +2
tir 12.08.2011 16:39 # −2
Было бы похеру - еще вчера закрыли тему.
roman-kashitsyn 12.08.2011 16:44 # 0
tir 12.08.2011 16:49 # 0
На гитхабе с удовольствием посмотрю.
tir 12.08.2011 17:19 # 0
Мое мнение: выглядит так, как будто написано, чтобы как-то работало, чтобы можно было делать UI часть. Коду предстоят рефакторинги, допилы. И покрытие тестами. Сильно сомневаюсь, что это конечные варианты классов. Скоро будет причесывание этого всего.
roman-kashitsyn 12.08.2011 17:36 # 0
tir 12.08.2011 22:03 # 0
Мне непонравился момент, что
try {
...
setHeadAsStart(repo, revWalk);
setUpFilter(revWalk, filter);
...
return results;
} catch (Exception e) {}
в методах setHeadAsStart и setUpFilter возникающие ошибки глушатся намертво (с логированием). При этом основной метод отрабатывает как ни в чем не бывало. Т. е. можно получить не те данные которые просили.
roman-kashitsyn 12.08.2011 22:36 # 0
roman-kashitsyn 12.08.2011 17:42 # 0
Любой код, даже хороший, постоянно модифицируется. Как только модификации закончились, проект начинает умирать.
tir 12.08.2011 14:59 # −5
Я не провозглашаю себя мессией. Мне не надо, чтобы вы сказали: "веди нас к свету", мне вообще глубоко параллельно какие чувства я у вас вызываю, меня это не волнует. Моя цель описана в 1-м абзаце. Я никого не учу.
Отвечаю по пунктам.
1. > расписавшись при этом, что сделал говно
Я нигде не писал, что накодил говно. Предложеное вами решение ничем принципиально не отличается от моего. Никто так и не смог предложить вообще никакого решения (кроме вас). Хотя это был бы лучший аргумент, вместо того чтобы переходить на личности.
2. Дрочить не надо - сотретесь. Я ничего никому не доказывал. Я просто сказал, ПОЧЕМУ код написан именно так. Почему из моего объяснения вы сделали вывод, что я вас учу - это ваша проблема, разбирайтесь в себе, почему вы так это воспринимаете.
Все чего я ожидал - это то, что после прочтения моего объяснения вы просто сделаете для себя какие-то выводы, и примите это или нет.
Lure Of Chaos 12.08.2011 15:08 # +2
2. все это пройденный этап - я уже писал большими буквами.
В общем, тред клозет. поржали и разбежались
tir 12.08.2011 15:09 # −1
Lure Of Chaos 12.08.2011 15:10 # +2
Fai 12.08.2011 15:13 # 0
*trollface*
Lure Of Chaos 12.08.2011 15:17 # +1
petrosyan.jpg
FAKYOUINTIRNEAT 12.08.2011 17:41 # −1
guest 12.08.2011 18:07 # +3
ingenuus 12.08.2011 15:42 # +1
gegMOPO4 12.08.2011 17:30 # 0
Fai 12.08.2011 14:53 # +6
Автор - тролль.
Тема - хуйня.
Lure Of Chaos 12.08.2011 15:09 # +2
унылый тролль
хуйовый флуд
roman-kashitsyn 12.08.2011 17:43 # +1
Фабрики - рабочим.
Деньги - кондуктору.
foGa 13.08.2011 09:08 # +1
Fai 13.08.2011 12:12 # 0
tir 12.08.2011 15:25 # −2
Fai 12.08.2011 15:28 # +1
Fai 12.08.2011 16:42 # 0
roman-kashitsyn 12.08.2011 16:46 # 0
gegMOPO4 12.08.2011 17:34 # +1
Fai 12.08.2011 21:23 # 0
tir 15.08.2011 08:50 # 0
gegMOPO4 15.08.2011 17:35 # 0
guest 12.08.2011 18:09 # −1
Чаще обращай на мнения людей, но я тебя плюсую. Ты прав.
tir 12.08.2011 21:49 # 0
eth0 13.08.2011 11:31 # +3
Ой-ой.
tir 15.08.2011 07:35 # −4
guest 12.08.2011 18:21 # 0
Fai 12.08.2011 22:25 # −5
1. SOMETHING будет выглядеть константой в глазах пользователя и это правильно.
2. setSomething() будет изменять эту константу и этот метод нужен, т.к. необходима, нет, НЕОБХОДИМА проверка на null.
3. getSomething() совершенно не нужен! Something можно только устанавливать, а читать можно SOMETHING - независимую константу.
*trollface*
Lure Of Chaos 13.08.2011 10:21 # +1
Fai 13.08.2011 12:11 # −3
SmackMyBitchUp 16.08.2011 22:06 # 0
RaZeR 16.08.2011 20:50 # 0
roman-kashitsyn 01.12.2012 20:55 # 0
guest8 09.04.2019 11:19 # −999