Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему так не любят Delphi? 
:(
    Опции темы
diadiavova
Дата 10.4.2013, 19:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 4
Всего: 142



Цитата(Zloxa @  10.4.2013,  14:25 Найти цитируемый пост)
Пожалуй, если бы уважаемый kolesnle, оставлял бы впечателние человека, способного дать адекватный ответ, я бы спросил у него, на сколько порядков лямбда-функция может облегчить мне жизнь.

Так вот оказывается что надо для того, чтобы ты не спрашивал про порядки smile 
Цитата(Akella @  10.4.2013,  13:57 Найти цитируемый пост)
Нафига выообще эти анонимные функции? 

Смотря что ты под ними понимаешь: у замыканий одно применение, у лямбда-выражений - другое.
Замыкания обычно нужны в тех случаях, когда некая логика, актуальная только для одного метода повторяется в нем несколько раз. В этом случае бывает удобно вынести ее в отдельное замыкание и вместо повторов вызывать его как обычный метод. Можно, конечно и на уровень класса вынести, но тогда все локально-видимые сущности (переменные, параметры и т. д.) придется передавать в виде аргументов при каждом вызове, что в конечном счете снизит эффект от использования такого подхода, я уже не говорю, что загромождается пространство класса методом, актуальным только в одном методе.
На самом деле использование замыканий в объектно-ориентированных языках не столь эффективно, как в функциональных, откуда они собственно и пришли. В функциональных языках они иногда решают такие задачи, которые в ооя решаются несколько иначе.
Что до лямд, то это очень актуальная штука, используются они главным образом для вызова методов, принимающих метод как аргумент. Во многих случаях лучше описать логику функции-аргумента прямо при вызове такого метода, чем выносить его на уровень класса. Иногда их использование в сочетании с некоторыми другими элементами языка дает даже некое подобие расширения синтаксиса языка(на самом деле никакого расширения нет, но результат практически тот же). Так что это вещь зачетная. Ну и там еще койчо может зависеть и от реализации, в дотнете, к пирмеру, однострочные лямбды могут быть разобраны на дерево выражений и это используется в некоторых интересных технологиях. Но это уже не столько сами лямды дают, сколько конкретная их реализация.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Beltar
Дата 10.4.2013, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



Цитата

Замыкания обычно нужны в тех случаях, когда некая логика, актуальная только для одного метода повторяется в нем несколько раз.


Это называется вложенная функция, существует в Паскале со времен его основания, оформляется самым естественным образом и не требует какого-то особого названия.

Кстати, в Delphi сейчас есть и вложенные типы, учитывая, что сама программа на Паскале может рассматриваться, как одна функция под названием Program и все остальное в нее вложено, четкая иерархия пространств имен в которой можно даже так:

Код

  TMyrecord=record
    a:Int32;
    b:Single;
    type
      TOneMore=record
      a:Int32;
      b:Single;
      end;
    var c:TOneMore;
  end;


 smile 


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
diadiavova
Дата 10.4.2013, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 4
Всего: 142



Цитата(Beltar @  10.4.2013,  21:29 Найти цитируемый пост)
то называется вложенная функция, существует в Паскале со времен его основания, оформляется самым естественным образом и не требует какого-то особого названия.

Учитывая, что понятие пришло из функционального программирования, полагаю было бы куда разумнее использовать терминологию, так же взятую оттуда. Некоторые разработчики языков и технологий очень любят давать вновь вводимым в эти технологии понятия свои названия(майкрософт тоже очень любит этим заниматься). Использовать их внутри своего круга - нормально, но настаивать на том, что так это должно называться повсеместно - все-таки наверно неправильно. 
Кстати в том же до-диезе анонимные методы появились еще до лямбд и замыканий, правда они не видели контекста и реализовны были иначе.
Цитата(Beltar @  10.4.2013,  21:29 Найти цитируемый пост)
Кстати, в Delphi сейчас есть и вложенные типы

В нете они тоже есть и были с самого начала.
Цитата(Beltar @  10.4.2013,  21:29 Найти цитируемый пост)
четкая иерархия пространств имен в которой можно даже так:

В нете пространства имен и так есть, правда нет области видимости охватывающей одно пространство, но это не смертельно.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Beltar
Дата 10.4.2013, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



Delphi и C++ не являются функциональными языками. Может и можно в них использовать эту парадигму, но тут я пас. Так зачем в них нужны методы из функционального программирования?


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
diadiavova
Дата 10.4.2013, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 4
Всего: 142



Цитата(Beltar @  10.4.2013,  21:55 Найти цитируемый пост)
Delphi и C++ не являются функциональными языками. Может и можно в них использовать эту парадигму, но тут я пас. Так зачем в них нужны методы из функционального программирования? 

Не знаю как насчет дельфы, но C++ - мультипарадигменный язык, хотя я в упор не понимаю, почему вопрос об этом языке задается мне. Если говорить обо всяких фишках, пришедших из других языков и парадигм, то обычно они заимствуются из-за того, что могут что-то полезное принести в язык. Вообще, современных языков, придерживающихся какой-то парадигмы в чистом виде скорей всего и нет вовсе. Разве что DSL-ы какие. А так, банальная рекурсия - и та пришла из функционального программирования, но никому же не приходит в голову спрашивать зачем она нужна.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
kolesnle
Дата 10.4.2013, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Упертый сишник
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 22.3.2013

Репутация: нет
Всего: нет



Цитата(Beltar @  10.4.2013,  20:29 Найти цитируемый пост)
вложенные типы

Они и в C++ были с самого начала smile Еще со времен C.
Код

    void method(){
        sruct{/*.......*/} my;
    }

тоже самое с классом
Код

   void method(){
       class{/*.......*/} my;
}

А можно и не анонимно
Код

    void method(){
        class MyCl{/*......*/};
        MyCl my;
   }


Это сообщение отредактировал(а) kolesnle - 10.4.2013, 21:53
PM MAIL   Вверх
Akella
Дата 10.4.2013, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 1
Всего: 329



мышкой поводите по матрице в разные стороны
http://www.embarcadero.com/ru/rad-in-actio...cation-showcase



Добавлено @ 23:37
Тут по поводу того хочу написать, что программист в дельфи сам должен уничтожать созданный им  объект и позаботиться о том, чтобы в случае исключения не было утечек памяти, это я про try...finally..end
Ну в этом нет ничего страшного. Может даже и хорошо, что так реализовано.
Но вот ещё один вариант:

http://alex.ciobanu.org/?p=478

Код

var
LVarList: Variant;//вариантный (неопределённый тип)
begin
  LVarList := AsDynamic(TStringList.Create);//создаем объект-список в обёртке
  LVarList.Add('Hello World!');
  LVarList.Add('Cool string');
  LVarList.Sorted := True;
  WriteLn(LVarList.Text);
end.


я не пробовал, но по словам автора блога, объект без проблем самоуничтожится при выходе из функции
PM MAIL   Вверх
Beltar
Дата 10.4.2013, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



Сам себя не похвалишь, никто не похвалит. ;)


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
k0rvin
Дата 11.4.2013, 05:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Beltar @  10.4.2013,  20:29 Найти цитируемый пост)
Это называется вложенная функция, существует в Паскале со времен его основания

Нет, не называется, ровно до тех пор пока вложенную функцию со всем ее лексическим контекстом нельзя передать во вне.

А всякие фишки типа каррирования и частичного применения делают замыкания крайне удобными. В том же Хаскелле, например.
Код

map (+ 1) [1, 2, 3]
-- [2, 3, 4]

foldl (*) 1 [1, 2, 3]
-- 6

product = foldl (*) 1
product [1, 2, 3]
-- 6


Добавлено через 6 минут и 44 секунды
Цитата(Akella @  10.4.2013,  23:23 Найти цитируемый пост)
мышкой поводите по матрице в разные стороны

Пример использования фичи ради самой фичи и как следствие — ужасный интерфейс.


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
irinazanuda
Дата 11.4.2013, 06:57 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 911
Регистрация: 23.6.2010

Репутация: нет
Всего: 18



Без hml  Вы все ничто!!!
PM MAIL   Вверх
Beltar
Дата 11.4.2013, 07:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 2
Всего: 7



Передать вложенную функцию во вне? Спасибо, курите свой бред сами. А мы уж как-нибудь проживем по строго иерархическй модели пространств имен. Что касается Хаскелла, то на него вобще глубоко до фени, пусть со своими концепциями, что угодно делает. И да, я лично не полезу в справочники, чтобы перевести на нормальный императивный язык, что за хрень тут приведена. Я вот этого понять не могу, обвинять язык А в том, что он не использует каких-то костылей из языка B.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Zloxa
Дата 11.4.2013, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 4
Всего: 161



Цитата(Beltar @  11.4.2013,  08:40 Найти цитируемый пост)
Передать вложенную функцию во вне? Спасибо, курите свой бред сами.

Чем это ужаснее делегирования метода? smile

k0rvin, и сколь же великие перспективы при этом открываются?

Это сообщение отредактировал(а) Zloxa - 11.4.2013, 08:58


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akella
Дата 11.4.2013, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 1
Всего: 329



Цитата(k0rvin @  11.4.2013,  05:15 Найти цитируемый пост)
Пример использования фичи ради самой фичи и как следствие — ужасный интерфейс. 

Ты настроен предвзято, не объективно  smile

Добавлено через 29 секунд
Там просто список приложений, написанных на дельфи. При чем здесь интерфейс smile

Добавлено через 55 секунд
Цитата(irinazanuda @ 11.4.2013,  06:57)
Без hml  Вы все ничто!!!

И звать нас никак!

Добавлено через 1 минуту и 54 секунды
Цитата(k0rvin @  11.4.2013,  05:15 Найти цитируемый пост)
А всякие фишки типа каррирования и частичного применения делают замыкания крайне удобными. В том же Хаскелле, например.
    
map (+ 1) [1, 2, 3]
-- [2, 3, 4]
foldl (*) 1 [1, 2, 3]
-- 6
product = foldl (*) 1
product [1, 2, 3]
-- 6


что это за бред smile 
PM MAIL   Вверх
kolesnle
Дата 11.4.2013, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Упертый сишник
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 22.3.2013

Репутация: нет
Всего: нет



Цитата(Akella @  10.4.2013,  23:23 Найти цитируемый пост)
мышкой поводите по матрице в разные стороны
http://www.embarcadero.com/ru/rad-in-actio...cation-showcase

Skype на Qt4 с C++ написан, а там не верная информация
PM MAIL   Вверх
diadiavova
Дата 11.4.2013, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 4
Всего: 142



 
Цитата(Akella @  11.4.2013,  10:34 Найти цитируемый пост)
что это за бред


Цитата(Akella @  11.4.2013,  10:34 Найти цитируемый пост)
Ты настроен предвзято, не объективно 

 smile
Цитата(Zloxa @  11.4.2013,  09:57 Найти цитируемый пост)
k0rvin, и сколь же великие перспективы при этом открываются?

На сколько порядков? smile
Цитата(kolesnle @  11.4.2013,  10:45 Найти цитируемый пост)
Skype на Qt4 с C++ написан, а там не верная информация

На чем бы ни был написан скайп, хвастаться этим точно не стоит smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.1016 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.