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

Поиск:

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


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(k0rvin @  8.8.2013,  12:16 Найти цитируемый пост)
Интересно каким образом "with Self" меняет контекст. В частности в примере Акеллы. 

  По меньшей мере меняет приоритет контекстов. Насколько я помню, в делфи локальный контекст имеет наивысший приоритет, во всех случаях кроме случаев внутри оператора with , внутри него по умолчанию все свойства и функции считаются принадлежащими объекту, если таких нет, то проверяется локальный контекст, затем область видимости модуля, затем других модулей.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
LSD
Дата 8.8.2013, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(diadiavova @  7.8.2013,  23:47 Найти цитируемый пост)
Смотря как реализован. В бейсике, например, он никаких проблем не вызывает, поскольку все контексты остаются доступными, а обращение к контексту блока происходит через точку

Сэкономим на имени локальной переменной, великое достижение smile 
А потом успешно сожрем сэкономленное бегин-эндами smile 


Цитата(drkot @  8.8.2013,  00:01 Найти цитируемый пост)
LSD, ну что я говорил... а Баба-Яга против!

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


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Akella
Дата 8.8.2013, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Цитата(k0rvin @ 6.8.2013,  16:21)
Цитата(Akella @  5.8.2013,  21:32 Найти цитируемый пост)
//как минимум, каждый раз не нужно case и break

Зато begin и end =)

Цитата(Akella @  5.8.2013,  21:32 Найти цитируемый пост)

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  with Self do
    case TButton(sender).Tag of
     0: begin Color := clRed; Caption := 'Красный'; end;
     1: begin Color := clYellow; Caption := 'Желтый'; end;
     2: begin Color := clGreen; Caption := 'Зеленый'; end;
    end;
end;

на яве можно сократить/упростить? 

Код

public void button1_Click(View sender) {
  switch (sender.getTag()) {
    case 0: setBackground(Color.RED);    setText('Красный'); break;
    case 1: setBackground(Color.YELLOW); setText('Желтый' ); break;
    case 2: setBackground(Color.GREEN);  setText('Зеленый'); break;
  }
}

Ну это для swing/awt. Для Андроида возможно есть свои особенности.

Зато begin и end можно убрать, если только одно действие выполняется

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  with Self do
    case TButton(sender).Tag of
     0: Color := clRed;
     1: Color := clYellow;
     2: Color := clGreen;
    end;
end;


а чаще всего именно так и происходит

Добавлено через 2 минуты и 57 секунд
Цитата(LSD @ 7.8.2013,  14:42)
with это костыль для убогих ЯП не позволяющих объявить переменную по месту.

а так?

Код

  with TfmApartAdd.Create(application) do
  begin
    ...
    ...
    ...
  end;


//или
function GetAdPrefix:string;
begin
  with TIniFile.Create(sMyDocAppPath + 'kvx.ini' ) do
    begin
      result := ReadString('AD','Prefix', '');
      free;
    end;
end;



никаких объявлений

Добавлено через 3 минуты и 29 секунд
Цитата(LSD @  7.8.2013,  14:42 Найти цитируемый пост)
with это костыль для убогих ЯП

толсто, толсто  smile

Добавлено через 4 минуты и 26 секунд
Цитата(k0rvin @  6.8.2013,  16:21 Найти цитируемый пост)
Ну это для swing/awt. Для Андроида возможно есть свои особенности. 

так для андроида ж то же самое
PM MAIL   Вверх
k0rvin
Дата 8.8.2013, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Akella @  8.8.2013,  16:51 Найти цитируемый пост)
а чаще всего именно так и происходит

А по хорошему достаточно массива [Tag] -> Color и не надо никаких свитчей. =)


Цитата(Akella @  8.8.2013,  16:51 Найти цитируемый пост)
толсто, толсто

Это не троллинг.
http://stackoverflow.com/questions/514482/...-a-bad-practice
http://wiert.me/2013/03/27/delphi-you-shou...s-future-proof/

Цитата(Akella @  8.8.2013,  16:51 Найти цитируемый пост)
а так?
Код

function GetAdPrefix:string;
begin
  with TIniFile.Create(sMyDocAppPath + 'kvx.ini' ) do
    begin
      result := ReadString('AD','Prefix', '');
      free;
    end;
end;

никаких объявлений

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

string GetAdPrefix()
{
    using (var f = new IniFile(sMyDocAppPath + "kvx.ini")) 
    {
        return f.ReadString("AD", "Prefix", "");
    }
    return "";
}

Код

func GetAdPrefix() string {
    f := ini.New(sMyDocAppPath + "kvx.ini")
    defer f.Close()
    return f.ReadString("AD", "Prefix", "")
}



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


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


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

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



Цитата(LSD @ 8.8.2013,  14:27)
Цитата(diadiavova @  7.8.2013,  23:47 Найти цитируемый пост)
Смотря как реализован. В бейсике, например, он никаких проблем не вызывает, поскольку все контексты остаются доступными, а обращение к контексту блока происходит через точку

Сэкономим на имени локальной переменной, великое достижение smile 
А потом успешно сожрем сэкономленное бегин-эндами smile 

Эмммммм... я чойт вообще не понял, какая связь между цитатой из моего поста и твоим комментарием под этой цитатой smile Я в своем посте только лишь написал о том, что блок With далеко не всегда вызывает описанную Алексейсом проблему с контекстами. Я при этом ни словом не обмолвился о том, какой это замечательный блок и сколько букаф можно сэкономить, используя его.
О блоке With я уже упоминал, причем не далее как в этой самой теме, и упоминал в том плане, что не считаю его серьезным преимуществом языка. Раньше я его вообще не использовал, потом попробовал - понравилось, но до сих пор считаю его скорее декоративным элементом языка, в некоторых случаях незначительно улучшающим код, и не более того. Букаф при его использовании в самом деле приходится писать меньше, поскольку объявление блока короче объявления переменной с инициализацией (а когда в языке не было выведения типов, то было существенно короче), никаких бигинов в языке отродясь не было, а все энды вводятся средствами кодкомплишн студии.

Добавлено @ 20:07
Цитата(k0rvin @  8.8.2013,  19:19 Найти цитируемый пост)
ну так и есть костыль для языков, где нет возможности легко объявить переменную по месту.

В бейсике такая возможность есть, а стало быть есть выбор smile 


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


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(diadiavova @  8.8.2013,  21:06 Найти цитируемый пост)
никаких бигинов в языке отродясь не было, а все энды вводятся средствами кодкомплишн студии.

  Так и в делфи. Начинаешь писать Be... он сразу предлагает завершить Begin / end жмешь Enter и есть готовый бегин/энд. Все это нубоглупости .


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
diadiavova
Дата 8.8.2013, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Alexeis @  8.8.2013,  21:14 Найти цитируемый пост)
Все это нубоглупости .

А чо ты мне об этом говоришь? Это не я взялся считать сколько лишних букв придется написать из-за бегинэндов.


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


Творец
****


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

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



Цитата(k0rvin @  8.8.2013,  18:19 Найти цитируемый пост)
ну так и есть костыль для языков, где нет возможности легко объявить переменную по месту.


Так а нафига вообще она нужна?

Добавлено через 2 минуты и 40 секунд
Цитата(diadiavova @  8.8.2013,  20:06 Найти цитируемый пост)
Я в своем посте только лишь написал о том, что блок With далеко не всегда вызывает описанную Алексейсом проблему с контекстами. 

 smile  соглесен

Код

with form1, dataset1 do
begin
// у form1 и dataset1 много разных свойств и методов
  edit1.text := FieldByName('name').asString;
  SpinEdit1.text := FieldByName('count').asInteger;
end;


Добавлено через 3 минуты и 44 секунды
Цитата(diadiavova @  8.8.2013,  20:06 Найти цитируемый пост)
В бейсике такая возможность есть, а стало быть есть выбор smile  


Вот именно. smile 
PM MAIL   Вверх
k0rvin
Дата 9.8.2013, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Akella @  9.8.2013,  08:46 Найти цитируемый пост)
Так а нафига вообще она нужна?

Для однозначной идентификации получателя сообщения.
Цитата(diadiavova @  8.8.2013,  20:06 Найти цитируемый пост)
Я в своем посте только лишь написал о том, что блок With далеко не всегда вызывает описанную Алексейсом проблему с контекстами.

Вот когда вызовет, тогда и поймешь зачем она нужна. Та же фигня и с юнитами.


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


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


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

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



Цитата(k0rvin @  9.8.2013,  10:10 Найти цитируемый пост)
Вот когда вызовет, тогда и поймешь зачем она нужна.

Может объяснишь "на пальцах" каким образом означенная проблема может возникнуть в бейсике?  smile 


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


Опытный
**


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

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



Цитата(diadiavova @  9.8.2013,  09:21 Найти цитируемый пост)
Может объяснишь "на пальцах" каким образом означенная проблема может возникнуть в бейсике? 

При чем тут Бейсик? Мы про Делфи.


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


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


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

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



Цитата(k0rvin @ 9.8.2013,  10:54)
Цитата(diadiavova @  9.8.2013,  09:21 Найти цитируемый пост)
Может объяснишь "на пальцах" каким образом означенная проблема может возникнуть в бейсике? 

При чем тут Бейсик? Мы про Делфи.

А мое замечание тоже дельфей касалось?  smile 


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


Опытный
**


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

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



Цитата(diadiavova @  9.8.2013,  10:25 Найти цитируемый пост)
А мое замечание тоже дельфей касалось?

Прости, я лишь воспользовался твоим замечанием, как отсылкой к проблеме, чтобы "далеко не ходить". =)


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


Leprechaun Software Developer
****


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

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



Цитата(diadiavova @  8.8.2013,  21:06 Найти цитируемый пост)
Я при этом ни словом не обмолвился о том, какой это замечательный блок и сколько букаф можно сэкономить, используя его.

Я просто прокомментировал, малополезность подобной конструкции. Не обязательно все принимать на свой счет.



Цитата(Akella @  8.8.2013,  17:51 Найти цитируемый пост)
а так?

А закрытие файла там выполняется? Всегда?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
drkot
Дата 10.8.2013, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


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

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



LSD, просто я тебя люблю, думаю не маленький должен был догадаться.

Цитата(LSD @  8.8.2013,  13:27 Найти цитируемый пост)
 даже не расписал чем так хорош with.

хорошесть, (ну кроме бурно обсуждаемых уменьшения численности буков, что неизменно улучшает читаемости кода) заключается в ускорении доступа к контексту объектов (или структур) обернутых в with. Если на пальцах, то при обращении элементу объекта идет сначала определение смещения на объект, а потом внутреннее смещение на элемент, при обертке with смещение на объект запоминается, что уменьшает количество "лишних" вызовов.
Конечно, такое ускорение ощутимо при обработке множества однотипных объектов (списки, коллекции, те же базы). Конструкция With Self конечно же не меняет контекст, и ее применение имеет скорее учебный характер, так как контекст Self уже доступен как локальный и дублировать такое описание нет необходимости. А вот конструкция with TMyObj(Sender) do гораздо интереснее, так как Sender как правило далекий родитель, и для работы понадобится либо локальная переменная, либо приведение типов, а оператор with позволяет переопределить локальный контекст.
Применение with в качестве замены локальной переменной не есть хорошо (лично на мой взгляд), так как приводит к мнимому упрощению (нет необходимости объявлять переменную), но не при этом не дает возможности получить контекст переменной вне блока. Такой подход оправдан разве что при создании списков и коллекций, когда созданнаы переменная добавляется в в список, и может быть получена вне блока. Создание же объектов без привязки (owner = nil) используя оператор with не лучшее решение (опять же на мой взгляд). 
 
Цитата(Akella @  8.8.2013,  16:51 Найти цитируемый пост)
function GetAdPrefix:string;begin  with TIniFile.Create(sMyDocAppPath + 'kvx.ini' ) do    begin      result := ReadString('AD','Prefix', '');      free;    end;end;

в частности такой подход лично я не одобряю, так как free выполнится не гарантированно.

Все сказанное касается исключительно компиляторов Delphi.

Добавлено через 1 минуту и 8 секунд
Цитата(LSD @  9.8.2013,  15:15 Найти цитируемый пост)
Я просто прокомментировал, малополезность подобной конструкции. Не обязательно все принимать на свой счет.

непонимание конструкции еще не говорит о её малополезности.


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

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

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


 




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


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

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