Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 440 441 [442] 443 444 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#6616
,
|
|
|
|
Цитата [S]mike @ Так как это сделано в Дельфи - это ад и отсутствие такого в Джаве - большое преимущество. Нет, ад - это когда нужно специально заводить тип для возвращаемых из метода параметров Добавлено ![]() Это сообщение было перенесено сюда или объединено из темы "Новости Embarcadero" |
|
Сообщ.
#6617
,
|
|
|
|
Ты просто не умеешь Джаву готовить
![]() Это сообщение было перенесено сюда или объединено из темы "Новости Embarcadero" |
|
Сообщ.
#6618
,
|
|
|
|
Цитата [S]mike @ Ты просто не умеешь Джаву готовить Ну, Delphi тоже нужно уметь готовить Кстати, я все же буду благодарен если ты поделишься со мной рецептом "как быть в случае, если из метода нужно вернуть несколько данных". Серьезно, без смайликаЭто сообщение было перенесено сюда или объединено из темы "Новости Embarcadero" |
|
Сообщ.
#6619
,
|
|
|
|
Цитата --Ins-- @ Кстати, я все же буду благодарен если ты поделишься со мной рецептом "как быть в случае, если из метода нужно вернуть несколько данных" Оффтопим. Внутренним классом, конечно же. Это сообщение было перенесено сюда или объединено из темы "Новости Embarcadero" |
|
Сообщ.
#6620
,
|
|
|
|
Цитата [S]mike @ Оффтопим. Внутренним классом, конечно же. Балин, а ты говоришь не умею готовить. Я думал и вправду не умею и там есть какое-то изящное решениеЭто сообщение было перенесено сюда или объединено из темы "Новости Embarcadero" |
|
Сообщ.
#6621
,
|
|
|
|
Цитата --Ins-- @ Я думал и вправду не умею и там есть какое-то изящное решение А чем это плохое? Предельно логичное решение. Вообще, проблема есть только с примитивными типами и immutable классами. В остальных случаях можно инстанс класса создавать перед вызовом метода и потом записывать в него нужные данные. Это сообщение было перенесено сюда или объединено из темы "Новости Embarcadero" |
|
Сообщ.
#6622
,
|
|
|
|
Цитата [S]mike @ А чем это плохое? Много чем. Очень много издержек. И у программиста, который тратит время неясно на что, и в рантайм - создание экземпляра, уничтожение... Возвращаемые отдельным методом данные - не такая важная сущность, чтобы ради них объявлять целый тип. Говорят, мол, в дельфи необходимость объявлять локальные переменные в заголовке - зло, мол, не такие они уж и важные, чтобы тратить на них время, и я с этим полностью согласен, а здесь - тот же случай, только еще более выраженный. Это сообщение было перенесено сюда или объединено из темы "Новости Embarcadero" |
|
Сообщ.
#6623
,
|
|
|
|
[S]mike, а для программирования на Джаве под Андроид нужен опыт применения ООП?
Это сообщение было перенесено сюда или объединено из темы "Новости Embarcadero" |
|
Сообщ.
#6624
,
|
|
|
|
Цитата --Ins-- @ Много чем. Очень много издержек. И у программиста, который тратит время неясно на что, и в рантайм - создание экземпляра, уничтожение... Возвращаемые отдельным методом данные - не такая важная сущность, чтобы ради них объявлять целый тип. Больше года уже на Джаве программирую, в том числе завершил тот проект, который ты начинал - и как-то не тоскую за тем что нельзя возвращать результаты через параметры функции. Зато все предельно просто и понятно, нету дилеммы: а не перезатрет ли эта функция значение моего параметра. Цитата Leklerk @ [S]mike, а для программирования на Джаве под Андроид нужен опыт применения ООП? Разумеется! Это один из самых необходимых скилов в программировании вообще, под Дельфи в частности, а под Андроид - тем боле. Еще нужно иметь представление о паттернах проектирования. Это сообщение было перенесено сюда или объединено из темы "Новости Embarcadero" |
|
Сообщ.
#6625
,
|
|
|
|
В С++ нет out/var параметров. Если ты имеешь в виду ссылки/указатели - то это отдельные типы данных. Добавлено Цитата --Ins-- @ Нет, ад - это когда нужно специально заводить тип для возвращаемых из метода параметров ![]() А как ты в делфи делаешь? Там же тоже вроде кортежей нет... Или через выходные параметры? Не назвал бы это изящным решением. Добавлено Цитата --Ins-- @ а здесь - тот же случай, только еще более выраженный. А можно годный пример такого метода? По-моему кортежи вполне удобны в подобных случаях. Другое дело, что ява с ними плохо работает, еще хуже С++. |
|
Сообщ.
#6626
,
|
|
|
|
Цитата [S]mike @ Больше года уже на Джаве программирую, в том числе завершил тот проект, который ты начинал - и как-то не тоскую за тем что нельзя возвращать результаты через параметры функции. Зато все предельно просто и понятно, нету дилеммы: а не перезатрет ли эта функция значение моего параметра. Смайк, это все сопли. Я так же могу сказать, что 10 лет программирую на Дельфи и как-то не горюю, но я ведь привел тебе конкретный аргумент. |
|
Сообщ.
#6627
,
|
|
|
|
Цитата --Ins-- @ Смайк, это все сопли. Я так же могу сказать, что 10 лет программирую на Дельфи и как-то не горюю, но я ведь привел тебе конкретный аргумент. А давай еще вспомним про Дельфийские вложенные методы? Когда в одной процедуре можно писать еще сколько угодно вложенных? Это же ад кромешный! Особенно в допотопной дельфийской иде, без нормального аутлайна классов. Var-параметры методов - меньшее зло, конечно. Но таки зло. Я говорил не о том, чтобы ради передачи параметров делать отдельный тип. А о том, чтобы сложную логику, требующую возврата нескольких результатов и где нельзя обойтись возвратом данных через стандартные классы (заполнить список, например) - нужно вынести логику во вложенный класс. Джава лишена дельфийского изврата, когда вложенные классы нужно не просто декларировать в интерфейсе класса, но еще и в имплементации методов писать что-то вроде TOuterClass.TClass.TInnerClass.MyMethod... Вот тебе пример: ![]() ![]() private class AddMaxOf { public final int Result; // Output public final int V; // Input-output public AddMaxOf(Player P, int v) { Result = Math.max(0, Math.min(v, mGame.gameLimit - P.scores.pool())); if (Result > 0) { P.scores.addPool(Result); v -= Result; } V = v; } } ... V = new AddMaxOf(P, V).V; В Дельфях это выглядело так: ![]() ![]() function AddMaxOf(P: TPlayer; var V: Integer): Integer; begin Result := Max(0, Min(V, Desk.GameLimit - P.Script[ScPool])); if Result > 0 then begin P.AddScript(ScPool, Result); Dec(V, Result); end; end; ... AddMaxOf(P, V); Весьма очевидные вызовы в Дельфях - радуют |
|
Сообщ.
#6628
,
|
|
|
|
Цитата jack128 @ А вот в C# понятнее сделано, там в явном виде задается что параметр out при вызове функции. А в чем принципиальное отличие шарпового варианта от дельфового? Добавлено Цитата [S]mike @ Вот тебе пример: Опять такой-же вопрос В чем принципиальная разница? |
|
Сообщ.
#6629
,
|
|
|
|
OpenGL, видимо в том, что в шарпе нужно указывать out при вызове.
Добавлено Цитата [S]mike @ А давай еще вспомним про Дельфийские вложенные методы? Когда в одной процедуре можно писать еще сколько угодно вложенных? Это же ад кромешный! В яве скоро будут(уже есть?) лямбды. Так что тоже можно будет фактически создавать локальные функции |
|
Сообщ.
#6630
,
|
|
|
|
Цитата OpenGL @ В шарпе при вызове функции надо явно указывать out и ref для соответствующих аргументов. Без них не скомпилируется. А в чем принципиальное отличие шарпового варианта от дельфового? Добавлено Цитата OpenGL @ Очевидно в неочевидности. Из вызова функции в Delphi с var/out-аргументом не видно, что аргумент может модифицироваться.В чем принципиальная разница? P.S. Хотя в Delphi надо просто сразу считать, что вызов функции модифицирует аргументы, если не доказано обратное Фишку с неконстантностью аргументов с атрибутом const мы уже обсуждали. |