программерское :: оператор отрицания
а вот не встречал ли кто языка, в котором можно вместо !str.contains( 'substr' )
писать вот так: str.!contains( 'substr' )
?
а вот не встречал ли кто языка, в котором можно вместо !str.contains( 'substr' )
писать вот так: str.!contains( 'substr' )
?
комментарии
rageous:
я не встречал
а надо ли?
в басике есть вещи типа
using str
{
if (!contains('substr'))
....
}
_arty:
надеюсь, ты мне не предлагаешь на нём писать? ; )
кроме того, я не хочу писать with ради одной строчки
rageous:
а зачем тебе вообще такая фича? :)
_arty:
вот тут описываю: http://-arty.livejournal.com/194366.html
acerv:
А в чем, собственно, проблема? Тебе не нравится порядок прочтения кода?
_arty:
да
вот тут подробнее: http://-arty.livejournal.com/194366.html
neoromantic:
Так это ересь же. Чтение по-любому должно быть последовательное. contains('abc') - понятно что. Булеан. !contains('abc') тоже булеан. а что такое str.boolean, если str это объект? Да и если класс? Да и чтобы то ни было?
_arty:
это не ересь : )
раскрываю тему: http://-arty.livejournal.com/194366.html
quappa:
Интересное предложение :)
На перле можно реализовать сорс-фильтром, это просто. Насколько я понимаю, в любом языке, позволяющем делать перегрузку операций из произвольного набора символов, это тоже можно реализовать в виде операции '.!'. В C++ к сожалению только макросами препроцессора.
Хм. Кстати, в перле есть ещё один интересный способ без дополнительной реализации! Вместо !$str->contains('substr') можно всегда написать ! contains $str 'substr'.
_arty:
в следующей записи описано, почему мне не нравится последний вариант : )
а про сорс-фильтры перла я, кажется, не слышал. Хотя, вроде бы на них кто-то реализовывал switch в перле : )
quappa:
В следующий записи ты, кстати, упустил тот факт, что далеко не все действия укладываются в формулу (субъект) (совершает действие) с (объектом). Наитипичнейший пример: вывод информации. Согласись, что синтаксис FILE->print($str) бесконечно ублюдочен по сравнению с print FILE $str. Другой пример: создание объектов (экземпляров класса) фабрикой (либо самим классом в вырожденном случае). MIME::Message->create(from => $data) vs. new MIME::Message from => $data.
Сформулировав на русском, скажу, что существует паттерн действия вида (действие) над (объектом1) и (объектамиN), который, будучи записанным инфиксно, выглядит противоестественно.
_arty:
ну почему же
меня вполне устраивает джавовское
out.println( string )
особенно если его поправить до состояния
file.appends( string )
quappa:
Второе -- да, читается хорошо. Не уверен, правда, насчёт socket.appends(string) или pipe('wc -l').appends(string), но речь не об этом.
_arty:
socket.send( string ) — классика : )
с пайпами не очень привычно работать, так что я не совсем в теме
pipe.named( 'wc -l' ).send( string )
new pipe('wc -l').send( string )
я понимаю, что названия методов отличаются от единого print, судьба такая : )
_arty:
s/send/sends/g
quappa:
Это плохая, фошыстская судьба -- писать три метода в потомках вместо одного в предке. Как школьнику Васе тогда написать функцию вывода таблицы умножения в произвольный поток, будь то файл, сокет, пайп или принтер?
_arty:
как школьнику Васе выразить одним словом всю полноту переживаний, охвативших его при виде одноклассницы Маши в миниюбке? : )
в конце концов, алиасы никто не отменял. Все эти потоки могут реализовывать print для полиморфизма и другие имена для читабельности.
quappa:
"О, Мышь!" -- сказала Алиса по-французски ;)
А ведь кому-нибудь обязательно захочется в неполиморфическом (зато читабельном) коде про файл сделать s/файл/сокет/g. Выходит, что лучше бы батяне потоку иметь груду алиасов для всех своих детишек? В любом случае по закону подлости однажды в коде ты обнаружишь файл_потокович.сенд(стринг) и все твои программисты в один голос скажут: "Это не я!"
Читабельность не должна подчинять себе здравый смысл. А то наметилась тенденция нынче, ага.
_arty:
ну это обращение в звательном падеже не передаёт даже возмущения или восторга : )
так же, как он сделает s/файл/сокет/g, он сделает и s/appends/sends/g
имхо, не стоит доходить до выведения Теории Всего из двух тезисов, как сделал тот мальчик-гений. Или до подсчёта длины массива словом scalar ; )
quappa:
_arty:
а отрицать существование чего бы то ни было не буду — не дурак : )
просто в моём опыте в js в последнее время очень многое укладывается именно в инфиксную нотацию
gone_one:
А Вы на ruby взгляните. Непосредственно тот пример, который Вы привели, не заработает - но некие аналогичные интересные выкрутасы там есть.
_arty:
спасибо за совет
о руби я очень много слышал, и кое-что даже видел, но уже знаю, что у него есть проблемы, признанные самим автором. Кроме того, хостингов под него маловато : )
gone_one:
Да я и сам о нем больше слышал, чем щупал. Я же не предлагаю начать писать на нем - я просто предлагаю взглянуть :)
или .А имел я в виду забавные конструкции типа:
_arty: : )
больше всего мне нравится вот такое:
40.hours.from_now + 2.days