![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 18 Всего: 142 |
Ну во-первых, почему это как в шарпе так лямбды, а как в васике - так сразу анонимные функции. Там они тоже лямбда-выражениями называются(вспоминается один фильм, где Лесли Нильсен пописав из пальца сказал про инопланетян "не такие уж мы и разные" ![]() Во-вторых речь была не о лямбдах. Для объявления обычного метода класса, возвращающего значение в васике используется ключевое слово Function, но в конечном итоге это превращается в то, чему напрочь отказываешь в том, чтобы называть это функцией. Я сопсно об этом. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 9 Всего: 49 |
Вот только я вижу разницу между лямбдами и "блоками кода которые что-то возвращают", а ты, похоже, нет. Поэтому у тебя на входе в мозг понятия "лямбда", "блок кода" и "метод" из 3-х абсолютно разных терминологий смешиваются в коктель под названием "функция". И это я еще курсы интуита не прошел! ![]() |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 9 Всего: 49 |
В басике оно называется function, потому что синтаксис унаследован от не-ОО языка чуть более чем полностью. Топик вообще-то про C#. "метод который что-то возвращает" - это вполне очевидно "функция" в смысле процедурного программирования. Мне не нравится сам факт "проваливания" в более низкий уровень абстракции. Сказать "Метод должен быть (провал из ООП в ПП) функцией чтобы его можно было использовать как операнд" - это примерно как "Именованный блок кода должен (провал из ПП в черт знает что) устанавливать значение регистра AX при выходе чтобы вызов этого блока можно было использовать как операнд.". A lambda expression is an anonymous function (с) из доки по C#. Вот только само по себе lambda expression описывает математическую функцию. Запись в коде (x,y) => x+y это не узкое понятие "кусок кода: взять x, взять y, сложить, результат вернуть". Это функция в матеметическом смыле. Можно построить график (x,y) => x+y. Нельзя построить график "куска кода". Да, лямбду компилятор может превратить в фукнцию в смысле cs (анонимный метод). А может и не превратить. Из коровы можно сделать колбасу, но никто ж не утверждает что корова - это колбаса. А книги - это туалетная бумага. |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 18 Всего: 142 |
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 9 Всего: 49 |
diadiavova, у вас там до сих пор модули есть.
Но если почитать повнимательнее, то "Имеющиеся в Visual Basic 6 математические функции были заменены эквивалентными методами класса System.Math". Т.е. оставили только фукции преобразования, да и то - собранные по модулям, и только в целях совместимостию |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 18 Всего: 142 |
Ну с этим я не спорю, но с другой стороны модуль - это обычный конечный класс со статическими членами. Кроме того, как я уже упоминал, в браузере обектов просмотри любой класс из васик-проекта, ты увидишь, что при группировании членов методы делятся на методы и функции. То есть говорю о том, что понятие функции как метода, возвращающего значение таки существует(по крайней мере в васике). Понимаю так же, что речь не о васике. Но внутренне эти функции ничем не отличаются от тех методов, которые ты упорно отказываешься называть функциями. Мало того, что они не отличаются., так одни и те же методы в васике являются таковыми , а в шарпе вроде как и нет. Если же мы говорим о терминологии конкретного языка(в данном случае шарпа), то почему когда речь заходит о лямбдах ты начинаешь рассуждать о том, как они исполняются, а не о том, чем они являются с точки зрения языка.
Надеюсь изложил понятно. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 9 Всего: 49 |
В васике есть историческое разделение. C# унаследовал синтаксис и терминологию от C/C++/JAVA, в которых нет разделения на функции/процедуры. Я не вижу ни одной разумной причины его вводить. Никтож не пытается скобки { } читать как "бегин/енд", хотя они внутренне ничем не отличаются от бегина/енда в васике. Я как раз пытаюсь показать что лямбды "не исполняются". С точки зрения и C# и васика, лямбда - функция в математическом смысле, отображение множества на множество, а не "подпрограмма", и не "блок кода, который что-то возвращает". Нельзя "выполнить" математическую функцию. |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 18 Всего: 142 |
В васике нет бегиненда...только енд. Так о чём мы говорим: о том как это называется в спецификации или всё-таки об общепринятых понятиях, которые допускают разную терминологию и которыми пользуются очень многие? Я этого всё-равно не понял. Да они для того, чтобы исполниться должны быть преобразованы в делегата, и что с того? В коде они работают так же как и пресловутые методы. Видимо ты ещё не работал с лямбдами из 4-го фреймворка. Там есть даже лямбды, возвращающие войд. Просто пространство System.Linq.Expressions немного расширили. Мало того, на этом пространстве построена платформа DLR, позволяющая портировать на дотнет динамические языки. А вних уже будут и функции и шмункции и со всем этим можно взаимодействовать из шарпа, втом числе через это же пространство имён. Так что не могу с этим согласиться. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
Skynin |
|
||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: 0 Всего: 10 |
Что не мешает писать что C# что на Java в процедурном стиле. Используя методы просто как процедуры и функции. И такой код массово встречается. Особенно у начинающих. Потому что в спецификации НЕ рассказано об объектно-ориентированном стиле, или функциональном стилях. "Кто книжек не читает, тот тратит время зря" на зубрежку спецификаций. Максимум - сможет работать вместо компилятора, отмечая ошибки в коде ![]()
Спецификация ЯП - это справочник по грамматике. О падежах, временах и порядке слов в предложении. "Онегина" такие справочники писать не научат.
row.Field > 42 - блок кода записанный в виде лямбды.
x * x - блок кода, оформленный в виде лямбды, и сохраняемый в виде объекта класса - Expression<Func<int, int>> Блок кода - это группированый набор выражений ЯП. Набор может состоять из одного выражения. Группировка может быть именованной. Когда-то она была всегда именованной. Хотя... очень быстро появились конструкции "указатель на функцию" подобные приведенной выше. Поэтому:
Неверно. Во-первых потому что у C# и васика не может быть точки зрения, это не субъекты ![]() Во-вторых, потому что выражения ЯП - предназначены для выполнения на некоем устройстве. А уж что они будут выполнять, модифицировать некие данные, работая как подпрограмма, или вычисляя математическое выражение не модифицируя внешние данные - зависит от "правил" ЯП, описанных в его спецификации и мыслетворчества программиста. Концепции из математики, типа "функций в математическом смысле", "множеств на множеств" записываются в ЯП в виде - кода. (слышал правда о визуальных ЯП, где кода нет, но к текущей теме это исключение не относится). И никак иначе. И правила этой записи - описываются в спецификации ЯП. Код ЯП строится из выражений разрешенных в этом ЯП, наборы которых группируются разрешенными в ЯП способами. Известные способы группировок: процедуры, функции, методы, лямбды. Когда же без понимания базиса в аргументации применяются "последние достижения науки", ИМХО - это просто ради форсу. Это сообщение отредактировал(а) Skynin - 11.12.2009, 11:44 |
||||||||||
|
|||||||||||
ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: 3 Всего: 7 |
Наверно у меня именно такой код. Большая просьба дать ссылку на примеры хорошего кода на C#. Ну или вообще, где он этот хороший код в хорошем стиле. Я просто не совсем понимаю, почему в C# плохо использовать методы как функции или процедуры... И хочу пример хорошего кода, поэтому, который это разъяснит. Это сообщение отредактировал(а) ДобренькийПапаша - 11.12.2009, 14:22 -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
Skynin |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: 0 Всего: 10 |
Штудировать паттерны(шаблоны). Не копировать, а вникать в идеи, в способ ОО мышления.
На самом деле "плохо" ничего не объясняет. Применение чего-либо должно быть обосновано. И вполне существуют ситуации когда процедурный стиль - оправдан, а правильный ООшный - излишний.
Глава из книги “Применение DDD и шаблонов проектирования: проблемно-ориентированное проектирование приложений с примерами на C# и .NET” Пример применения шаблона State. |
||||||
|
|||||||
ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: 3 Всего: 7 |
Понятно. У нас в универе преподаёт программер с 20-ти летним стажем. Он сказал, что штудировать шаблоны - идиотизм. (Я с ним согласен, хотя и не очень доверяю ему).
Как можно понять шаблоны не столкнувшись с определённой ситуацией, где тот или иной шаблон нужен? Это небольшой оффтопик, но мне хотелось бы услышать мнение дядиВовы и Партизана по этому поводу. Что вот так вот прям, надо взять и проштудировать шаблоны? Это сообщение отредактировал(а) ДобренькийПапаша - 11.12.2009, 15:40 -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
Skynin |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: 0 Всего: 10 |
Есть и такое веяние. Аналогичное - программировать нужно в нотепаде! Дело хозяйское, хошь учись, хошь не учись и коси под программиста с 20летним стажем. У меня - 17 лет. ИМХО, идиотизм - это "книг не читать", опыта не иметь, но вести себя как многоопытный. Мало того, если препод этот дальше Форта и Си не продвинулся, то идиотизм слушать его мнение об ООП. И общее, возможно с этим преподом не так - преподавание программирования у нас давно - преотвратительное. Иногда ощущение от вчерашних студентов - что они хоть что-то знают не благодаря, а вопреки тому как их учили. Началось это еще с моего студенчества, когда талантливые ребята смеялись над предложением аспирантуры. И туда шли те, кому больше некуда было. Вот и получается как в статье Специальность - каменщик Представьте на минуту, что в некоем университете существует профильная специальность для строителей-каменщиков. На что была бы похожа ее образовательная программа, если смоделировать ее как программу обучения по информатике? В первый год обучения мы даем студентам знания о кирпичиках. О видах кирпичей. О размерах кирпичей. О предназначении кирпичей. Простые кирпичи, глазурованные кирпичи, кирпичи для внешней отделки, кирпичи для укладки мостовых, огнеупорные кирпичи. Каждый экзамен проверяет знание о каком-либо частном виде кирпичей и их использовании. ... И вот они становятся выпускниками. И получают степень бакалавра по профессии каменщика. Их первое задание – «построить декоративную кирпичную стену». И в этот момент они осознают, или должны осознать, как мало в действительности они знают. Они никогда не занимались постройкой стен более чем из 18 кирпичей. И они еще не знают о такой штуке, которую все каменщики используют – о металлической проволоке, которая натягивается вдоль стены, чтобы все кирпичи лежали ровно даже на 100-метровой кладке. И они вообще ничего не знают о современных подходах в строительстве, вроде лазера который позволяет прочерчивать ровную линию вдоль стены. И они не знают как противостоять сильному ветру на высокой стене. Никто не говорил им о подкладках под стойку и о линии промерзания. Они даже не знают как пользоваться простым молотком, чтобы разбить один кирпич на два. И у них нет никаких, даже самых туманных представлений об эстетике, и поэтому они не знают что же слово «декоративный» обозначает в действительности. В строительных традициях есть такая вещь как тренировка, но это всего лишь подготовка перед «ученичеством», которое продолжается несколько лет под опекой опытных строителей. Только после того, как будет продемонстрирован определенный набор навыков, производится повышение из «ученика» в «подмастерья» Конец цитаты. Но вместо того что выделил - эти каменщики говорят - да к черту проволоку! Да какие лазеры! Я шо, метеоролог чтобы знать о промерзании?? Или культуролог чтобы рассуждать что такое "декоративный"??? Я каменщик прочитавший спецификацию ЯП - а потому "ф топку" эти книги! Я могу строить здания, а не какие-то там стеночки.
А там описаны - задачи. А вот как можно подпускать неграмотного программиста к любой задаче? Я - не пускаю. Найдете того кто будет рад ###коду в продакшене - замечательно. А если дать исходники реального приложения, где применяются паттерны, то большие у меня сомнения, что не знающий их - быстро и точно поймет о ситуации, и аргументации выбора автора кода. А если там еще и оптимизация по эффективности проведена, то... Вот Вы русский язык знаете? А нука, прочтите И. Канта "Критика чистого разума". Много поймете? А если после учебника "История философии" для неспециализированых курсов? Это сообщение отредактировал(а) Skynin - 11.12.2009, 16:29 |
||||
|
|||||
PashaPash |
|
||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 9 Всего: 49 |
Опять 25 ![]() Лямбды не обязательно должны быть преобразованы в делегат "чтобы исполниться". Посмотри, например, fluentnhibernate.org. Там лямбды использутся как равнозначная замена xml-файла. Т.е. в xml-ный маппинг вроде не функция, а как только аналог записан в коде в виде лямбд (не методов) - вдруг становится функцией? Skynin, как вы ловко превратили мое "почти не читаю" в "не читаю" и косвенно обозвали идиотом. Для этого явно надо 20-летний стаж и знание форта. Я читаю 3-4 хороших книги в год + периодику + туеву кучу статей. В последнее время ни разу не встречал книги про "функции и процедуры в C#". Может я что-то не то читаю, мне надо взять пару книг "C# за 21 день", поднять свой уровень чуть выше идиотизма....? Какой смысл читать "историю философии", если уже давно прочитал и понял Канта ![]()
Понятия из процедурного программирования - это справочник по типам бумаги. "Онегина" такие справочники писать не научат. Почему вы вместо простого ответа на "лямбда это функиция" ушли в пространное рассуждение о блоках кода? Неужели так сложно на него ответить в рамках "общепринятых понятий"? Может быть с "понятиями" что-то не то? Это же совсем простой вопрос, могу даже на части его разбить: 1. Это функция, по понятиям?
2. То же, но на VB. Это функция, по понятиям?
По вашему понятию функции и по вашему "Известные способы группировок: процедуры, функции, методы, лямбды." ответы - "нет", "нет". В принятых в докуменации по C# и VB терминах - "да" "да". Странно, правда? Ну и вообще известные способы группировки, в переложении на аналогию со стихами: "Известные типы стихов: синие, зеленые, квадратные, твердые". Намешаны термины из 3-х разных разделов CS. Добавлено @ 17:24 Не штудировать паттерны - идиотизм. Как ты поймешь что шаблон нужен в определенной ситуации, если не знаешь самих шаблонов? ![]() К сообщению Skynin-а можно только добавить про овердизайн. Это когда каменьщик начинает строить декоративную стену вмето несущей, потому что он вчера прочитал про паттерн "красивые узоры из кирпича" и хочет его применить. А потом все здание разваливается к чертям, хотя построено очень красиво. Это сообщение отредактировал(а) PashaPash - 11.12.2009, 17:32 |
||||||
|
|||||||
ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: 3 Всего: 7 |
Ну не знаю, взял я банду четырёх, силился-силился и ничё толком так и не понял. По сему отложил её, может позже что-то пойму.
-------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | .NET для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |