- 1
if (fooTextField.getText().equalsIgnoreCase("")) {
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+73
if (fooTextField.getText().equalsIgnoreCase("")) {
Не то, чтобы очень говно...
Просто порадовало :)
А в целом, ёпта, ну создайте статик-метод где два аргумента равноправны и забудьте вы про эти NPE
хотя, надо отдать должно ребятам из Оракла, работают на славу. хоть и не всегда в желаемом направлении
лично мне не хватает ее. за что и люблю ruby
Другими словами, чем больше перегрузок есть у определенного оператора, во столько же раз больше времени у вас будет занимать понимание текста.
Это подтверждается исследованиями приобретением навыков чтения у детей.
По этой же причине, не смотря на то, что естесственные языки позволяют применять виртуально бесконечное количество грамматик к любому фрагменту текста, в подавляющем большинстве случаев читающему достаточно оперировать монограммами, или диграммами для понимания прочитанного.
Если так хочется сэкономить - лучше напишите функцию состоящую из нескольких операторов - и экономия больше, и когнитивного диссонанса меньше.
т.е.
1+2 === 1.+(2)
искать придется один метод
Но даже если такое возможно, то все равно искать прийдется не один, а все: см. полиморфизм. А в языке с рантайм типизацией, не только полиморфизм, но еще и угадывать какой же именно тип будет в конкретном месте в любое время.
да, в Руби стандартные классы открыты для перегрузки. древний троллинг: перегрузить оператор + на - для класса Fixnum и сломать любой код
В фитоне тоже можно отнаследоваться и перегрузить.
Не хочу начинать, но толку от ваших =,==, ===,==== никакого. Читабельность - нулевая. Пускай я старомоден, но метод eq предпочтительные и понятней что это метод и где его искать.
Без словаря и мануала не поймешь что как и где работает.
Мне сходу на ум приходят эдак пять разных способов делать equal.
eqRef - равество ссылок
eq - equals() выдает true.
eqSerialized - равенство сериализованных объектов, то бишь строковые представления равны.
eqEmpty - когда "", null или другие пустые объекты равны.
eqDeep - очевидно что сканит массивы и структуры в полную глубину.
eqCast - равенство с приведением типа. (===)
Как понять какой из методов где используется:?
Что в каждом конкретном случаебудет значить ==, ===, ==== - запомнить нереально.
100500 идиотских правил: енумы сравниваем через ==, объекты через equals, а массивы вообще через жопу. Потому я вообще за то чтобы выпилить из языков богомерзкие ==,=== и сравнивать через eq(a,b) и пр.
== сравнивает содержимое со всевозможными кастами. например, null==""
=== сравнивает ссылки, т.е. не ""===""
хотя, строки могут быть иммутабельными, а потому, повторно использовать уже созданные строки
хотя, конечно, a.equals(b), который бросает NPE, если первый аргумент нуллевой - это верх идиотизма
Но ведь производительность то точно такая же.
Повезет разве что если хеши уже посчитаны, и сравнение пройдет чисто по хешам. Или обе строки являются одним и тем же объектом.
- ascii?
Юзаю length. Э-э. На --client при определенных кастах (.length() == 0) медленее раза в три. Полиморфизм на марше.