Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
In your code you invoke the extension method with instance method syntax. However, the intermediate language (IL) generated by the compiler translates your code into a call on the static method. Therefore, the principle of encapsulation is not really being violated. In fact, extension methods cannot access private variables in the type they are extending.
Синтаксический сахар. Бессмысленный и беспощадный.
Ждк, когда шарпоблядки уже начнут дохнуть от диабета.
Лажа. У Python буферизованный вывод, а в java использовался небуферизованный. После фикса у меня результаты различаются незначительно:
Java:
Time to write: 0.978872978
Python:
Time to write: 0.882999897003
С вводом сложнее: в примере в случае python использовалась кастомная функция разбиения на слова. java.util.Scanner работает на регулярных выражениях, т.е. требует гораздо больше вычислений. Переписывать код python на java у меня желания нет.
В итоге выяснилось, что автор бенчмарка просто недостаточно компетентен для проведения бенчмарков.
Разные люди пишут решение стандартных задач на любимом языке, самые быстрые решения выбираются в качестве эталонной реализации для конкретного языка, и уже эти эталонные реализации сравниваются.
Я еще ничего для себя не открывал.
Если бы я намеренно начал открывать для себя мсдн, то весьма скоро раздел шарпа на этом ресурсе стал вторым после пхп.
Или это априорное утверждение, что MSDN полон говна?
Между прочим, в дельфе под IL partial classes продвигали как killer-фичу. Суровые люди: у меня из-за такого сахара знакомство с новыми библиотеками виджетов проходит как "отрыл доку-припух от количества методов-пошел дальше писать на винапи".
При этом документированы они - вот так, всем скопом, без разбиения на классы в иерархии. К какой абстракции какой метод/свойство относится, отследить сложно уже сейчас.
кэп подсказывает что такой хелп генерит тулза. и она дублирует описания методов их базового класа в наследники. и то что оно так выглядит - проблема мсдн-а, а не .net-а.
> Ждк, когда шарпоблядки уже начнут дохнуть от диабета.
ты еще в функциональные языки загляни. может соратников найдешь - у них тоже такое специальное и своеобразное отношение к синктаксическим подсластителям.
как по мне ... ну че тут говорить. мой любимый язык Перл и этим все сказано. все что это экономит время, без потери производительности, как по мне чистый плюс.
> все что это экономит время, без потери производительности, как по мне чистый плюс.
А все, что без особой надобности усложняет язык и понимание кода. Так что становится неясно - принадлежит ли этот метод классу или это extesion откуда-то из недр проекта.
Тоже хорошо? >чистый плюс.
Два плюса. В тред приглашается Тарас
А вот школота учится по таким примерам, и потом думает, что это нормально и я вижу такой код в своих проектах. А у меня от этого потом батхерт. И я прихожу, злой на говнокод, на говнокод.ру.
Говно или нет, но и junior'ы и даже senior'ы туда лазят исправно. И лично мое мнение, что стоит сказать огромное спасибо мелкомягким за то, что такое пособие имеется, и там во многом расписано все очень подробно и понятно, не смотря на встречающиеся там ляпы и банальные примеры.
Новичкам сложно читать MSDN. Даже если они знают Английский.
Это справочная информация, а новичку полезней гайд читать(книжку) о том, как правильно реализовывать тот или иной сценарий.
Спорить не стану. Документация у MS всегда была получше, чем у конкурентов.
Искать говнокод в учебных примерах и на геймдеве - "I am a wimp" сложность.
public static class ExtClass
{
public static void extFoo(Bar bar,P1 p1,P2 p2)
{
....
}
}
И мы вызываем метод
bar.extFoo(p1,p2) //фича
ExtClass.extFoo(bar,p1,p2) //нормальный вызов
//кстати в яве есть import static методов и там можно написать так (после импорта метода конечно)
extFoo(bar,p1,p2)
Мне неясно в чем профит? О каких тоннах кода речь?
>//кстати в яве есть import static методов и там можно написать так (после импорта метода конечно)
Выглядит приятнее обоих методов, но в этом случае нет автодополнения, специфического для данного интерфейса, и списка методов, которые есть в случае "bar.*".
Мне тоже не особо понравилась, как разобрался. Только одна фича сделанная через cglib заинтересовала.
select(sales, having(on(Sale.class).getValue(), greaterThan(50000)))
getValue() - каждый раз выдает разные значения из списка.
непонятно при чем тут плоская шутка про женский пупок, но все же
если найти программиста-женщину
то можно обрадоваться умению считать лишь до двух начиная и с живота тоже
Я написал не про тонны кода во время вызова, и я, кстати, не сильно понял при чем тут java.
Кстати о вызовах, представь как будет смотрется какой-то хитрый linq запрос через методы без этого сахара.
>Расскажу страшную тайну: Шарп изначально скраден с Жабы, чуть менее чем полностью.
И что тут такого? Все у всех все тырят, и жаба тут тоже не исключение.
>Выходит, что MS добавила в язык extensionы ради всего-то одной новой технологии - LINQ, и частного случая - флуент-интерфейса.
Зато очень полезная и удобная технология. Мне кажется, что оно того стоило.
Кстати вспоминил старую фичу VB - оператор With. Тоже сахар, но идея здравая тем, что для компонентов можно было структурировать сетящих св-ва говнокод, а-ля:
With Form1
.Width=1000
.Height=200
.Left=(Screen.Width-.Width)/2
.Top = 100
.Caption="Очередная говноформа"
.Autoredraw=true
.foo()
итд...
Form2.Style=.Style
End With
Так вот безо всяких флуентов можно было писать подобный код, причем даже гибче.
Нет ограничений - метод возвращает this, нет ограничений на порядок: Form2.Style=.StyleНо и в бейсике оно довольно убого, а вот в языках с хорошими препроцессорами или макросами можно творить чудеса не захламляя язык ненужными дерьмом.
Да, в этом особая прелесть лиспа: если тебе нехватает синтаксической конструкции - напиши макрос. Это до сих пор является основной killer-фичей лиспа, всё остальное уже проникло в другие функциональные языки (Nemerle тоже предоставляет отличные макросы, но лисповые вроде пока круче). В новую версию Scala думают тоже засунуть макросы (только ещё пока не могут решить, нахрена они там нужны).
> Nemerle тоже предоставляет отличные макросы, но лисповые вроде пока круче
Сложно сравнивать макросы языков с динамической и статической типизацией.
Немерловые макры не менее круты, но их запись несколько сложнее (более громоздкая) именно из-за статической типизации.
with в Дельфи есть.
Я даже один раз нарвался на баг, когда with перекрыл внутренним именем внешнее. Но такие вещи надо на уровне компилятора пресекать или хотя бы предупреждение выдавать.
Эм?.. Этот "синтаксический сахар" называется "объектно ориентированное программирование". Или вы предлагаете втыкать эту конструкцию в каждом месте, где нужна длинна слов? А то, что написано в комментарии - называется "оптимизация".
и чо тут? фича - супер. пример гавно. автор открой студию, там в интеллисенсе расширения закрытыми глазами
видны.
автору кода книги в оуки и пояснить где такое нужно юзать.
автор, иди ты... писать в машинном коде! ибо все языки программирования, даже Ассемблер - всего лишь синтаксический сахар, который, в итоге, переводиться в машинный код.
В общем-то.
Ada и PHP, наверное, самые любимые. xD
А ещё сколько языков в Си транслируется, который может выполняться под JVM...
А кто передатчик?
http://xrunhprof.wordpress.com/2007/11/18/language-benchmark-java-vs-python/
Дело даже не в результатах. Вообще эквивалентности никакой.
>def readword(st, bufferSize=4096):
С вводом сложнее: в примере в случае python использовалась кастомная функция разбиения на слова. java.util.Scanner работает на регулярных выражениях, т.е. требует гораздо больше вычислений. Переписывать код python на java у меня желания нет.
В итоге выяснилось, что автор бенчмарка просто недостаточно компетентен для проведения бенчмарков.
http://shootout.alioth.debian.org/
Разные люди пишут решение стандартных задач на любимом языке, самые быстрые решения выбираются в качестве эталонной реализации для конкретного языка, и уже эти эталонные реализации сравниваются.
Идите в школу, мальчик, MSDN вам не нужен.
Если бы я намеренно начал открывать для себя мсдн, то весьма скоро раздел шарпа на этом ресурсе стал вторым после пхп.
Или это априорное утверждение, что MSDN полон говна?
http://leotsarev.moikrug.ru/
Тады ж неудобна буит писать в их любимам linq флует-интерфейс.
http://stackoverflow.com/users/41956/abatishchev
хех, предсказуемо
Вот, глянь. Методов дохрена, в стандартной документации иерархия игнорируется напрочь. Туда ещё хоть полшишечки лишних сахарных методов - и класс превратится в свалку.
ты еще в функциональные языки загляни. может соратников найдешь - у них тоже такое специальное и своеобразное отношение к синктаксическим подсластителям.
как по мне ... ну че тут говорить. мой любимый язык Перл и этим все сказано. все что это экономит время, без потери производительности, как по мне чистый плюс.
На светлую сторону склонять я пытаюсь, но тёмной стороной силы всё пропитано здесь.
а диавол уже искушает христа.
да и в темноте просто веселее.
А все, что без особой надобности усложняет язык и понимание кода. Так что становится неясно - принадлежит ли этот метод классу или это extesion откуда-то из недр проекта.
Тоже хорошо?
>чистый плюс.
Два плюса. В тред приглашается Тарас
Сам метод нормальный, но подозреваю, что код, использующий этод метод говнище то ещё.
А если взглянуть на список разделителей слов, то он явно не полный.
>ЧёЯДелаюНеТак?
может много троллишь?
>можна
>толька
>платить
Значение
1 Отдавать деньги или другие ценности в возмещение покупки, услуги, совершённого нарушения.
(люблю, когда мне платят платиной)
2 Перен. возмещать, воздавать, совершать ответное действие
(не люблю)
3 Платить натурой.
(тоже не плохо от лиц противоположного пола)
Это справочная информация, а новичку полезней гайд читать(книжку) о том, как правильно реализовывать тот или иной сценарий.
Искать говнокод в учебных примерах и на геймдеве - "I am a wimp" сложность.
И мы вызываем метод
Мне неясно в чем профит? О каких тоннах кода речь?
Выглядит приятнее обоих методов, но в этом случае нет автодополнения, специфического для данного интерфейса, и списка методов, которые есть в случае "bar.*".
c чего ты взял?
import static ...ExtClass.* //импортит тебе все статик методы
http://www.op4j.org/
select(sales, having(on(Sale.class).getValue(), greaterThan(50000)))
getValue() - каждый раз выдает разные значения из списка.
Ну и структура проекта (для общего развития).
Как говорит автор: если можете - юзайте Scalу.
где у программера кнопка "счастье"?
массаж простаты.
если найти программиста-женщину
то можно обрадоваться умению считать лишь до двух
начиная и с живота тоже
Кстати о вызовах, представь как будет смотрется какой-то хитрый linq запрос через методы без этого сахара.
Расскажу страшную тайну: Шарп изначально скраден с Жабы, чуть менее чем полностью.
>представь как будет смотрется какой-то хитрый linq запрос
Вот! Собственно о чем я и говорил позавчера:
>http://www.govnokod.ru/8652#comment122393
Выходит, что MS добавила в язык extensionы ради всего-то одной новой технологии - LINQ, и частного случая - флуент-интерфейса.
И что тут такого? Все у всех все тырят, и жаба тут тоже не исключение.
>Выходит, что MS добавила в язык extensionы ради всего-то одной новой технологии - LINQ, и частного случая - флуент-интерфейса.
Зато очень полезная и удобная технология. Мне кажется, что оно того стоило.
Так вот безо всяких флуентов можно было писать подобный код, причем даже гибче.
Нет ограничений - метод возвращает this, нет ограничений на порядок: Form2.Style=.StyleНо и в бейсике оно довольно убого, а вот в языках с хорошими препроцессорами или макросами можно творить чудеса не захламляя язык ненужными дерьмом.
Интересней было бы послушать Тараса.
>Clojure есть макрос doto:
как я и сказал в спойлере: макросы - рулят.
Сложно сравнивать макросы языков с динамической и статической типизацией.
Немерловые макры не менее круты, но их запись несколько сложнее (более громоздкая) именно из-за статической типизации.
Повторю.
Насколько мне известно, в макрах Немерла нельзя так писать. Но зачем?
Вообще, в Nemerle2 макросистема будет кардинально переработана. Авторы обещают блэкджек и прочее.
А ещё немерлисты на рсдн писали, что готовы помочь скалистам с их макросистемой.
Интересней было бы послушать Тараса.
тарас подтвердит: хорошо сосет
Я даже один раз нарвался на баг, когда with перекрыл внутренним именем внешнее. Но такие вещи надо на уровне компилятора пресекать или хотя бы предупреждение выдавать.
2)Анонимные объекты на основе with использовал когда-нибудь?
2. Да, и это шикарно.
with TBitmap.Create do...
что хуже?
у хохлов даже гумна своего нет, приходится пиздить у кацапов
Мои поздравления 😀
http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/statements.html#with
5 баллов 😀
В Clojure есть макрос doto:
КГ/АМ
видны.
автору кода книги в оуки и пояснить где такое нужно юзать.