|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
Как сделать, чтобы IntelliSense показывал мои заданные имена для параметров, а не arg1, arg2, arg3.... не красиво ведь ! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 21:07 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
Просто очень глаза режет. Сильно снижает ценность от Func<> ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 21:11 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
Пример функции Код: c# 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 21:14 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
тоже не помогает ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 21:31 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotekПросто очень глаза режет. Сильно снижает ценность от Func<> Галаза режит говриш... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 22:28 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
Не критичная проблема, но можно было бы и запилить её. Видимо разрабы забили. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 22:33 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
МСУНе критичная проблема, но можно было бы и запилить её. Видимо разрабы забили. Ну не скажите :( В методе из 5-ти параметров (особенно если они одно-типные) уже неприятно. Приходится быть внимательней или не пользоваться. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2014, 23:55 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
МСУНе критичная проблема, но можно было бы и запилить её. Видимо разрабы забили. ничего они не забыли, делегату пох чего ему там присвоили к тому же, сдаётся мне, что это баян ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 00:03 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
Изопропил, ++ обыкновенный делегат который инициализируется по месту указателем на ф. или на ранее созданную. можно удирать по нему F12 и посмотреть как он объявлен в методанных. если уже невтерпеж, можно сделать своё объявление - "перекрыть" delegate TResult Func<in T, out TResult>(T myArg); ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 00:48 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotekКак сделать, чтобы IntelliSense показывал мои заданные имена для параметров, а не arg1, arg2, arg3.... не красиво ведь ! Переходи на F#, он легко разруливает такие штуки! Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 10:51 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
Я выходец из Дельфи. Мои эксперименты в массовом использовании Func<> Action<> заключались в попытке перенести из мира Дельфи "встроенные функции". Очень жаль, что аналогов в C# нету. Func и Action могли бы стать отличнейшей заменой ! Правда есть огромные сомнения в производительности, что и вынудило отказаться от идеи. Кто знает ? Func и Action создают новый класс для каждой лямбды или встраивают метод в класс в котором были объявлены ? Т.е. в таком коде: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
Компилятор на выходе создаст 3 отдельных класса + MyClass? Благодаря вложенным функциям, в Дельфи было легко и приятно писать "Как Мартин Фаулер завещал" (здоровья ему :) ) - по максимуму вынося весь код в подфункции. Да, можно создать отдельный класс и создавать в нем приватные функции. Но есть масса примеров, когда вынесение кода в функцию класса не практично. Примеры - проверка входных параметров, различные валидации внутри функции, маппирование объектов. Все это можно вынести в отдельные функции, но что если функции нужно СТРОГО И ТОЛЬКО в данной функции ? Например проверка входных параметров в функцию контроллера Asp.net MVC. Приходит 15ть параметров модели, которые нужно проверить. Выносить в отдельную функцию бесмысленно. Чтобы не замусоривать класс, т.к. эти входные параметры строго индивидуальны для данного метода. В Дельфи подобное легко оформлялось в подфункции. В C# придется делать приватный метод и визуально захламлять интерфейс контроллера. В итоге вместо 5 методов контроллера + 2,3 приватных общих, получаем 20 методов, из которых 15 используются строго в одном методе. Есть разница ? :) Не получится писать красивый код, состоящий из сплошных вызовов подфункций. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 14:11 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 14:20 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotekЯ выходец из Дельфи. Мои эксперименты в массовом использовании Func<> Action<> заключались в попытке перенести из мира Дельфи "встроенные функции". Очень жаль, что аналогов в C# нету. Func и Action могли бы стать отличнейшей заменой ! Правда есть огромные сомнения в производительности, что и вынудило отказаться от идеи. Кто знает ? Func и Action создают новый класс для каждой лямбды или встраивают метод в класс в котором были объявлены ? Т.е. в таком коде: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
Компилятор на выходе создаст 3 отдельных класса + MyClass? Благодаря вложенным функциям, в Дельфи было легко и приятно писать "Как Мартин Фаулер завещал" (здоровья ему :) ) - по максимуму вынося весь код в подфункции. Да, можно создать отдельный класс и создавать в нем приватные функции. Но есть масса примеров, когда вынесение кода в функцию класса не практично. Примеры - проверка входных параметров, различные валидации внутри функции, маппирование объектов. Все это можно вынести в отдельные функции, но что если функции нужно СТРОГО И ТОЛЬКО в данной функции ? Например проверка входных параметров в функцию контроллера Asp.net MVC. Приходит 15ть параметров модели, которые нужно проверить. Выносить в отдельную функцию бесмысленно. Чтобы не замусоривать класс, т.к. эти входные параметры строго индивидуальны для данного метода. В Дельфи подобное легко оформлялось в подфункции. В C# придется делать приватный метод и визуально захламлять интерфейс контроллера. В итоге вместо 5 методов контроллера + 2,3 приватных общих, получаем 20 методов, из которых 15 используются строго в одном методе. Есть разница ? :) Не получится писать красивый код, состоящий из сплошных вызовов подфункций. Рекомендую побольше почитать на эту тему (как с этим дела в Delphi, не знаю). ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 14:27 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ЕвгенийВ, Великолепно !!! Значит, все таки Func и Action можно использовать как замену вложенным функциям !! Компилятор обернул все так как и нужно - в статические методы. В принципе, я на это надеялся :) Верил, что разработчики не глупы. Остается проблема, описанная в топике... :) Что IntelliSense не выводит нормальные имена. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 14:30 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
Ilya81, Паттерны я знаю :) Вопрос стоял о читаемости кода, а это уже Мартин Фаулер с идеей минимальных и читабельных методов. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 14:32 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotek, вас не смущает что это делегаты, и иницализируются они простыми указателями ? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 14:36 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
Где-то в степи, А что должно смущать ? Типобезопасность ? То, что это делегаты, инициализирующиеся указателями на функции - так это же и отлично. Производительность максимальна. В чем проблема ? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 14:38 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotekЕвгенийВ, Великолепно !!! Значит, все таки Func и Action можно использовать как замену вложенным функциям !! Компилятор обернул все так как и нужно - в статические методы. В принципе, я на это надеялся :) Верил, что разработчики не глупы. Остается проблема, описанная в топике... :) Что IntelliSense не выводит нормальные имена. Так сделай статический класс и помести туда нужные тебе методы, смотри например класс Math. Хотя многие делфисты не в курсе, что у них статические методы и class procedure/function, что для меня было шоком. C# полностью (почти) ОО язык, забудь про процедурное программирование и методы вне класса! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 14:38 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotekIlya81, Паттерны я знаю :) Вопрос стоял о читаемости кода, а это уже Мартин Фаулер с идеей минимальных и читабельных методов. Ну так используйте Helper (или Decorator, или ещё что, что больше подходит к задаче). Ничего нового здесь придумывать не надо, всё уже придумано. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 14:41 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ЕвгенийВ, Так я об этом и говорю, что вынесение метода в приватный метод - ЗАМУСОРИВАЕТ код. Мы выносим метод в общий интерфейс класса, который используется лишь одним единственным методом. Или вы предлагаете на каждый метод создавать отдельный класс ? Будет головняк с общими методами. Придется делать иерархию классов и выносить общие методы в базовых класс... Кхм, отличная альтернатива вложенным функциям ;) Не знаю, что за дельфисты не знают, что class function/procedure это синоним статической функции, разве что студенты может быть ? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 14:42 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotek, проблема в вашей "читаемости" и причем тут читаемость? тип делегата и название аргумента задается при объявлении делегата, но не как при его инициализации, мало того может быть ветвленная инициализация разными функциями с разным названием аргуметов, и что вы там замечтаете увидеть в intelisense ? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 14:44 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotekЕвгенийВ, Так я об этом и говорю, что вынесение метода в приватный метод - ЗАМУСОРИВАЕТ код. Мы выносим метод в общий интерфейс класса, который используется лишь одним единственным методом. Или вы предлагаете на каждый метод создавать отдельный класс ? Будет головняк с общими методами. Придется делать иерархию классов и выносить общие методы в базовых класс... Кхм, отличная альтернатива вложенным функциям ;) Не знаю, что за дельфисты не знают, что class function/procedure это синоним статической функции, разве что студенты может быть ? :) Зачем отдельный класс на каждый метод - объединяйте схожие по назначению методы в статические классы, а классы в namespace'ы - по мне вполне логичная иерархия вспомогательных функций. При этом желательно учитывать используемые в них типы данных (принципы, одно из названий которых - S.O.L.I.D). ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 14:48 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotekНе знаю, что за дельфисты не знают, что class function/procedure это синоним статической функции, разве что студенты может быть ? :) Есть отличия? Если есть то в чем? Код: pascal 1.
Код: pascal 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 14:53 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ЕвгенийВ Код: pascal 1.
Код: pascal 1.
Нинаю :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 15:04 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ЕвгенийВ, Часто вы этим пользуетесь ? :) Я не претендую на гуру. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 15:05 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
Где-то в степи, Я понимаю, что делегат можно использовать совершенно в разных местах и поэтому имена параметров могут различаться в разных функциях. Я лишь жалею, что IntelliSense не может динамически вычислить имена параметров, когда, в принципе, это можно было бы и сделать на программном уровне. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 15:07 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ЕвгенийВЕсть отличия? Если есть то в чем? [/src] http://www.gunsmoker.ru/2008/12/static-delphi.html Классовый метод можно объявить статическим (только в новых версиях Delphi) Я только на Delphi 7 работал. ВИдимо по этому и не знаю про это ключевое слово. Про stdcall то знаю - это порядок передачи параметров методов, что важно для работы DLL и COM. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 15:10 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
Ilya81Зачем отдельный класс на каждый метод - объединяйте схожие по назначению методы в статические классы, И что, проверку входных параметров, какого нибудь MVC контроллера, из 15ти параметров вынести в отдельный статический класс ? И туда же кинуть валидацию для остальных методов контроллера ? Я могу лишь оставить код в самом методе. И будет полотно. Которые в принципе можно спрятать под #region - но это не одно и тоже, что настоящая функция, т.к. не позволяет сделать вызов и придется разворачивать это полотно, чтобы увидеть что же там делается то. Либо я могу вынести валидацию входных параметров метода в отдельный приватный метод... Ну да круто. 5 публичных методов, и каждый имеет еще по приватному методу, проверяющему входные парметры. А потом добавить еще 5 методов для маппирования входных параметров в объектную сущность-модель. А потом еще по 5.... Круто. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 15:17 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotekЯ лишь жалею, что IntelliSense не может динамически вычислить имена параметров, когда, в принципе, это можно было бы и сделать на программном уровне. позанимаемся спиритизмом )) Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 15:22 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
Где-то в степипозанимаемся спиритизмом )) Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Хорошо, хорошо. Согласен. Вывод просто. В C# нет аналогов вложенных функций. Вот и весь вывод. Я об этом жалею. Func, Action может являться лишь некоей заменой. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 15:27 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotekIlya81Зачем отдельный класс на каждый метод - объединяйте схожие по назначению методы в статические классы, И что, проверку входных параметров, какого нибудь MVC контроллера, из 15ти параметров вынести в отдельный статический класс ? И туда же кинуть валидацию для остальных методов контроллера ? Я могу лишь оставить код в самом методе. И будет полотно. Которые в принципе можно спрятать под #region - но это не одно и тоже, что настоящая функция, т.к. не позволяет сделать вызов и придется разворачивать это полотно, чтобы увидеть что же там делается то. Либо я могу вынести валидацию входных параметров метода в отдельный приватный метод... Ну да круто. 5 публичных методов, и каждый имеет еще по приватному методу, проверяющему входные парметры. А потом добавить еще 5 методов для маппирования входных параметров в объектную сущность-модель. А потом еще по 5.... Круто. Нужно много параметров передать в какой-то метод - объединяйте в классы. Нужно много параметров для создания класса - создавайте его через Builder. Всё-таки разберитесь получше в шаблонах проектирования, такие вопросы говорят об их слабом знании. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 16:16 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotek, авторИ что, проверку входных параметров, какого нибудь MVC контроллера, из 15ти параметров вынести в отдельный статический класс ? И туда же кинуть валидацию для остальных методов контроллера ? если вы о asp.net mvc то статик туда не влезет валидация изнутри? , делается снаружи и через атрибуты. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 16:28 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotekВывод просто. В C# нет аналогов вложенных функций. Вот и весь вывод. Я об этом жалею. Func, Action может являться лишь некоей заменой. На кой ляд нужны вложенные в функции функции? Какую задачу они решают? Я просто тупо не вдупляюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 16:43 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotekFunc, Action может являться лишь некоей заменой. Не являются они заменой вложенных функций. Ни в коем случае! Так даже рассуждать неприлично. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 16:44 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotekЯ лишь жалею, что IntelliSense не может динамически вычислить имена параметров, когда, в принципе, это можно было бы и сделать на программном уровне. Это банально от не понимания. Это с опытом испарится полностью. Если даже опыт не поможет, то это уже безнадёжно. Можешь дальше расстраиваться абсолютно по глупому и бесполезному поводу. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 16:45 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
hVostt, мне вот интересно , ну лень искать, как их компилятор интерпретирует в стек вызовов: дробление основной функции на мелкие или вызов подфункции из основной через указатель или еще как? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 16:50 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
Где-то в степи, Да суть не в конкретной проблеме. Я знаю, что в MVC можно сделать валидацию модели атрибутами или даже сделать само-валидируемую модель. У меня просто есть желание писать код в стиле Дельфи: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
Красиво же ? Желаю, чтобы Check, ConstructValue и ProcessValue были вложенными методами, а не методами класса. Ладно. Проехали. Буду пилить через Func. Создавал топик лишь чтобы узнать есть ли возможность получить красивый результат. Нету и нету. Закрываем темку :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 16:52 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
Где-то в степиhVostt, мне вот интересно , ну лень искать, как их компилятор интерпретирует в стек вызовов: дробление основной функции на мелкие или вызов подфункции из основной через указатель или еще как? Кого, делегаты? Анонимные делегаты такие же, как и именованные функции, только анонимные. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 16:52 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
hVosttНа кой ляд нужны вложенные в функции функции? Какую задачу они решают? Я просто тупо не вдупляюсь. Оу.. Почитайте книгу дедушки Файлера. Рефакторинг :) http://refactoring.guru/catalog http://rsdn.ru/res/book/prog/refactoring.xml Особенно "6. Составление методов" ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 16:54 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
В принципе, на мой взгляд именование параметров может быть полезным но не для этого, а для того, для чего их чаще всего применяют в F# (ну или как замену Prolog'у и т. п.). Но если pattern matching уже относительно скоро в C# планируется, авось со временем и другие полезные возможности приделают. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 16:55 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotekКрасиво же ? Желаю, чтобы Check, ConstructValue и ProcessValue были вложенными методами, а не методами класса. Ничего красивого в этом нет, раздувается код родительской функции -- что В ЛЮБОМ СЛУЧАЕ ПЛОХО. ProBiotekБуду пилить через Func. Создавал топик лишь чтобы узнать есть ли возможность получить красивый результат. Нету и нету. Ты ещё попробуй навязать способ программирования, который принят в дельфях, в яваскрипте, в лиспе, в хаскеле, ещё где-нибудь. На лицо закостенелость мышления и давление привычек. Советую не навязывать способ разработки принятый в одной среде, в другую -- это всегда плохо кончится, при чём для тебя. Серьёзно. Никто же в дельфи не лезет с мудацким «а вот в сишарпе не тааа-ааа-к». Это не профессионально, и глупо. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 16:56 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotekОу.. Почитайте книгу дедушки Файлера. Рефакторинг :) Почитайте http://msdn.microsoft.com/ru-ru/library/ms173171.aspx%5D]http://msdn.microsoft.com/ru-ru/library/ms173171.aspx] про делегаты. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 16:57 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
hVosttГде-то в степиhVostt, мне вот интересно , ну лень искать, как их компилятор интерпретирует в стек вызовов: дробление основной функции на мелкие или вызов подфункции из основной через указатель или еще как? Кого, делегаты? Анонимные делегаты такие же, как и именованные функции, только анонимные. вложенные функции и процедуры! интересно узнать у Пасклистов, как взять указатель на вложенную функцию? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 16:58 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
hVosttНичего красивого в этом нет, http://refactoring.guru/extract-method Изучайте изучайте сайт и книгу, Уважаемый :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 16:58 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotek http://refactoring.guru/extract-method Изучайте изучайте сайт и книгу, Уважаемый :) Пока что я вижу, что Вы сами ничего их вышеперечисленного не читали. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 16:59 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
Рефакторинг - это как игра в наперстки, пишем говнокод , а потом его улучшаем т.е. всегда при деле и при у.е. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 17:00 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
Где-то в степивложенные функции и процедуры! интересно узнать у Пасклистов, как взять указатель на вложенную функцию? Я сомневаюсь, что у Пасклистов можно хоть что-нибудь полезного узнать. Уровень очень низкий. Плюются ссылками на книги, которые сами даже не открывали. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 17:01 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
Где-то в степикак взять указатель на вложенную функцию? Этого и не нужно ! Они не для того. А для красивого и понятного кода. Вот тут хорошо об этом написано: http://www.apofig.com/2009/12/extract-method-1.html ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 17:01 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotek, авторпросто есть желание писать код в стиле Дельфи пишите, в чем проблема?- но на Делфи, командная разработка? - не не слышал.. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 17:05 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 17:05 |
|
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 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotek, Вы как то фривольно разбрасываетесь словом Интерфейс, хотя я понял в каком контексте вы его употребили, в программировании оно дуально и поэтому надо всегда его дополнять особенно в контексте кода.. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 18:52 |
|
IntelliSense для Func<> Action<> ?
|
|||
---|---|---|---|
#18+
ProBiotekНу хотел придумать способ повысить читабельность класса. Ты не отличаешь определение от реализации. В реализации в классе может быть сколько угодно приватных методов, и это никого не должно парить. Для разраба это удобно, так как он знает что все методы, они на уровне класса. В твоём случае разраб должен ебнуть себе мозг на тему где же этот метод находится: в классе или в самой функции. Хорошо ли это? Нет! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2014, 19:06 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1402074]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
83ms |
get tp. blocked users: |
1ms |
others: | 319ms |
total: | 477ms |
0 / 0 |