|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
hVostt, Не злите МСУ :) Он из дельфистов. И зря вы так про Дельфийцев. Те, кто поработал на "низкоуровневом" языке (Дельфи, C++) до C# они гораздо больше понимают. Т.к. не раз и не два писали свои собственные компоненты, видели код VCL и в 90% имели дело с WinApi. Это хорошая база и фундамент. А уж если и на ассемблере пришлось пописать немного, то вообще замечательно. А студенты, которые никогда на C++ не создавали свой оконный класс, которые про Message loop никогда не слышали, а сразу сели за "высокоуровневый" C#, вот они действительно ничего не понимают. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 17:06 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
Где-то в степиProBiotek, авторпросто есть желание писать код в стиле Дельфи пишите, в чем проблема?- но на Делфи, командная разработка? - не не слышал.. Вот-вот. Я этого никогда не понимал. «ХОЧУ ПЕЙСАТь КАК НА ДЕЛЬФЕЙ» — так пиши на Дельфи, хрен ли ты лезешь туда, чего понять тупо не в состоянии. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 17:06 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotekhVostt, Не злите МСУ :) Он из дельфистов. И зря вы так про Дельфийцев. Те, кто поработал на "низкоуровневом" языке (Дельфи, C++) до C# они гораздо больше понимают. Т.к. не раз и не два писали свои собственные компоненты, видели код VCL и в 90% имели дело с WinApi. Это хорошая база и фундамент. А уж если и на ассемблере пришлось пописать немного, то вообще замечательно. А студенты, которые никогда на C++ не создавали свой оконный класс, которые про Message loop никогда не слышали, а сразу сели за "высокоуровневый" C#, вот они действительно ничего не понимают. Я ничего протиф дельфей не имею. Просто если уже начинать спор где чего есть/нет, то дельфи сольёт, я тебе обещаю. Начнём с LINQ, м? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 17:07 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
оу не в курсе, что в Delphi Prism он таки появился ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 17:09 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
hVosttВот-вот. Я этого никогда не понимал. «ХОЧУ ПЕЙСАТь КАК НА ДЕЛЬФЕЙ» — так пиши на Дельфи, хрен ли ты лезешь туда, чего понять тупо не в состоянии. Да ну вас... Я всего лишь спросил в тебе "а есть ли в C# аналог того, что есть в Дельфи". А вы тут себе уже навыдумывали блин чего-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 17:09 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
что такое красивы код? в контексте программирования, кто знает? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 17:09 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotekДа ну вас... Я всего лишь спросил в тебе "а есть ли в C# аналог того, что есть в Дельфи". А вы тут себе уже навыдумывали блин чего-то. Просто изначально вложенные функции не нужны, даже если бы они были, они бесполезны. Для организации кода это только вред, так как функции должны быть как можно меньше и решать одну задачу. Вложенные функции превращают эту идею в какую-то вакханалию. Может сразу внутри функции разрешить создавать свои классы? Отдельные неймспейсы внутри функции? Это всё тонкая грань, чтобы упасть лицом в говнокод. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 17:13 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
Где-то в степичто такое красивы код? в контексте программирования, кто знает? Красивый и читабельный . Есть разница ? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
и Код: c# 1. 2. 3. 4. 5. 6. 7.
Сколько секунд вы потратили, чтобы ПОНЯТЬ что делает первый код, а сколько второй ? Если вы заметили, что второй код понятнее, поздравляю, вы готовы начинать изучать методы рефакторинга, и в частности его паттерн Extract Method, один из полу-сотни паттернов :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 17:14 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotek, ответ не верный, читайте вопрос - в контексте программирования, а не в контексте языка! еще попытка ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 17:17 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
hVosttПросто изначально вложенные функции не нужны Да да, раскажите мне, Дельфийцу какие они бесполезные, эти вложенные функции :) А лучше откройте VCL из Delphi и поизучайте его. Особенно те методы, где есть ассемблерные под-функции. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 17:17 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotek, ассемблерные вставки, это то чего так не хватает в net! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 17:21 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
Где-то в степиProBiotek, ответ не верный, читайте вопрос - в контексте программирования, а не в контексте языка! еще попытка Ок. Попытка №2. Именно в констектсе программирования - разбиение метода на подфункции играет огромную роль.Сколько секунд вы потратили на чтение первого примера кода и второго в 17058813 ? Разбивать на функции нужно, это ясно. Теперь переходим к преимуществам подфункций. Они не засоряют интерфейс класса! Чтобы в C# сделать рефакторинг и получить красивый код, нужно сделать еще 3-4 дополнительные метода в классе: проверка валидности входных параметров, биндинг этих параметров на бизнес модель, и т.д. И так для каждого публичного метода. Причем эти под-методы нужно строго одному методу, который их и использует. Если у вас 5 публичных методов класса получают разные параметры, то им бесполезны методы валидации соседних методов. Для каждого из них придется создать кучу приватных методов в классе. В итоге в классе будет 5 публичных методов + 20 приватных. 20 это валидация и мапинг, нужные только каждому методу. Вы тратите внимание при чтении класса, пытаясь осознать все эти 20 методов, когда вам нужно сконцентрироватся на 1 методе. Подфункции убирают эту проблему . Они хранятся в самом методе и не захламляют интерфейс. Все чисто, читабельно, понятно: Код: c# 1. 2. 3. 4. 5.
PS. Что касается производительности. Компилятору ни-че-го не стоит вынести подфункции в приватные-статические методы класса во время трансляции кода. Что он и делает с лямбдами см 17057449 . ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 17:29 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotekДа да, раскажите мне, Дельфийцу какие они бесполезные, эти вложенные функции :) А лучше откройте VCL из Delphi и поизучайте его. Особенно те методы, где есть ассемблерные под-функции. Давай без привязки к языку? Я уверен, и не только я, что функции в несколько экранов (где ты собираешься заюзать вложенные функции) -- зло, потому что это гумно пахнет отвратительно, и даже по Фаулеру, очень плохо. А теперь с привязкой, архитектура корпоративных приложений предусматривает жёсткую декомпозицию, использование архитектурных шаблонов, куда вложенные функции не укладываются никаким боком. С практической точки зрения, у тебя одна большая функция, где ты втулил вложенные функции, и в чём проблема? В отсутствии интелисенса? В рамках одного файла, где поднял глаза и нашёл определение? Проблема высосана из пальца, обсужать её глупо и бесперспективно. Не понимаю даже о чём спич. И зачем ты мне советуешь лезь в VCL, если мне делфи не нужны ни по работе, ни для души? Зачем мне это? Я не мазохист. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 17:38 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotekТеперь переходим к преимуществам подфункций. Они не засоряют интерфейс класса! Про приватные функции, кажется, ты слыхом не слыхивал, да? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 17:39 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotek Подфункции убирают эту проблему . Они хранятся в самом методе и не захламляют интерфейс. Все чисто, читабельно, понятно: Это какое-то гумно, честно. Я даже обсуждать такой ущербный подход не собираюсь. Функции должны быть короткими (не больше 1-1/2 экрана, за исключением оч. редких случаев), они должны быть выразительными, тестируемыми, с возможностью инъекций, аспектов, контрактов -- это всё вложенным функциям не снилось. Нафиг мне вложенные фукнции? ЧТобы навести ещё больше бардака? Ни одного, ни единого преимущества, поэтому их нет в C#, и никто не жалуется, кроме заблудших дельфистов, которые не умеют быть гибкими. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 17:43 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotek, программирование уже давно стало групповым ремеслом ( командным ), даже само понятие красивый код уже подразумевает групповое командное обсуждение. красивый код это 1 код написанный согласно общепринятым нормам и рекомендациям, ( название типов, переменных, методов и т.д.) "общепринятым" - читать как красивый в контексте команды или всего языкового сообщества. P.S. я уж опустил понятие спецификации, ибо он не скомпилится )) 2 Достаточно документированный для быстрой адаптации новых членов команды или для использования его снаружи. 3 Иметь "моральные скрепы" - обязательства. такие как: не менять состояние объекта без необходимости через события sender ( трудноуловимое изменение при чужом сопровождении ) или акцентировать это действие, при инициализации по месту лямбдой , если более трех строчек кода, выделять в отдельный метод и т.д. ( у Липперта много об этом) ну и все )) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 17:50 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
Где-то в степи, ну да самое главное забыл, тестируемый ( прочитал хвоста )) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 17:54 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
hVostt, Я шутливо предложил поглядеть на VCL, чтобы увидеть как используются вложенные функции и как они чистят код в плане читабельности. Приватные функции как раз и засоряют интерфейс класса. Программисту, который поддерживает этот класс, без разницы приватные они или нет. Они перед его глазами висят, и рассеивают его внимание. Вглядываясь в 20 методов класса, вернувшись к нему через год, приходится вспоминать для чего эти методы, всем ли методам класса они нужны, или только одному из них. В принципе можно скрыть вспомогательные методы, которые используют только 1 метод с помощью #region. Но тут появляется некоторый риск, что они случайно "уплывут" от метода, который их использует, если кто-то (да хотя бы и сама среда, когда вы просите ее заимплементить методы интерфейса) добавит свою функцию между. Вложенные методы просто физически не смогут "уплыть" от использующего их метода. Они в нем. Компилятор без проблем может их вынести в статик методы на этапе компиляции, когда они уже не будут мозолить глаза программисту.. Синтаксический сахар однака :) Просто, когда я писал на Дельфи, мне было очень приятно писать вложенные методы. Не утверждаю, что без них нельзя жить :) Не делайте их мухи слона. Я не бегаю с воплями "C# плох, там нету того, что есть в Дельфи", и не предлагаю мерятся "кто круче, C# или Дельфи". Вчера я решил создать эту темку, чтобы узнать нету ли какого-то аналога. Только и всего. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 17:59 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotek, я просто делюсь авторОни перед его глазами висят, и рассеивают его внимание. Вглядываясь в 20 методов класса вполне реально и актуально, я делаю частичный класс и весь мало нужный хлам скидываю туда, что бы не мешался. авторчерез год, приходится вспоминать для чего эти методы, всем ли методам класса они нужны, или только одному из них. и такое часто было, чешешь репу, что я тут понаписал, поэтому не ленюсь или подписываю комментариями или внятное название метода что бы не заблудиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 18:07 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
Где-то в степи, Да, в принципе вложенный класс не протестируешь отдельно. Согласен. Нужно тестировать сам методы, и вложенный метод должен быть протестирован тем самым. С другой стороны, признаю, что вложенные методы могут быть не простыми, и требовать отдельного юнит-тестирования. Ок. Может все это и перевешивает плюсы от вложенности методов :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 18:21 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotekПриватные функции как раз и засоряют интерфейс класса. Программисту, который поддерживает этот класс, без разницы приватные они или нет. Они перед его глазами висят, и рассеивают его внимание. Вглядываясь в 20 методов класса, вернувшись к нему через год, приходится вспоминать для чего эти методы, всем ли методам класса они нужны, или только одному из них. В интерфейсе класса есть только публичные функции. Не позорься. ProBiotekВ принципе можно скрыть вспомогательные методы, которые используют только 1 метод с помощью #region. Но тут появляется некоторый риск, что они случайно "уплывут" от метода, который их использует, если кто-то (да хотя бы и сама среда, когда вы просите ее заимплементить методы интерфейса) добавит свою функцию между. Вложенные методы просто физически не смогут "уплыть" от использующего их метода. Они в нем. Компилятор без проблем может их вынести в статик методы на этапе компиляции, когда они уже не будут мозолить глаза программисту.. Синтаксический сахар однака :) При чём тут компилятор. Вложенные функции это что вообще? К чему они относятся? Раздутый код функции с вложенными функциями -- это что? Я скажу что это -- это плохо пахнущий, грязный, плохо поддерживаемый код, не дающий никаких преимуществ. Я чётко знаю, что в функции у меня код, если требуется декомпозиция, код выносится в приватную функцию. Приватные функции не засоряют интерфейс класса, потому что это ИНКАПСУЛЯЦИЯ — слыхал о таком? Ну почитай пару книжек по ООП, Фаулера почитай, по ссылкам которые ты мне скидывал, текст почитай. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 18:25 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotekОк. Может все это и перевешивает плюсы от вложенности методов :) Дело в том, что вложенные функции изначально не нужны. Тестирование, контракты, аспекты, это да... Но и в целом во вложенных функциях видится только вред, а не польза. Никакой пользы. Зато скажу в противовес, вот JavaScript вложенные функции -- это гуд, потому что парадигма совсем другая, подходы к разработке совсем другие, язык другой. И надо уметь извлекать пользу от подходов, принятых в каждом отдельном языке программирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 18:28 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotekВчера я решил создать эту темку, чтобы узнать нету ли какого-то аналога. Только и всего. Просто постарайся понять, что Func<> и Action<> не имеет никакого отношения к вложенным функциям, это не аналог, и даже нельзя рассматривать их в таком качестве. Это делегаты. Хочешь, можешь определить именованные делегаты с параметрами, и будет тебе интелесенс. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 18:30 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotek, авторОк. Может все это и перевешивает плюсы от вложенности методов :) да бросьте Вы всю эту маниловщину , повзрослейте, тут куча полиглотов пишущих на разных языках и не испытывающих лексическую нужду, у каждого языка есть спецификация исходите из этого http://blogs.msdn.com/b/ruericlippert/ ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 18:40 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
hVostt, ок ок :)) Приватные методы я назвал интерфейсом потому-что, а как их еще назвать, с точки зрения программиста, поддерживающего код. Он видит эту кучу методов и должен ими оперировать и понимать что для чего. Это суть описания интерфейса класса :) Ну хотел придумать способ повысить читабельность класса. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 18:45 |
|
|
start [/forum/topic.php?fid=20&msg=38844062&tid=1402074]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 153ms |
0 / 0 |