Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 331 332 [333] 334 335 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#4981
,
|
|
|
|
А там есть аргумент? Там есть констатация факта. После чего говорится, что таким образом господа "упрощают повествование".Цитата korvin @ Игорь заявил, что Top -- бред сивой кобылы, я ему ответил, что это не так и наличие Top бывает удобным. А в чём противоречие то? Наличие бреда для некоторых индивидов (особенно обвиняемых в тяжких преступлениях) бывает удобным, но это всё равно бред |
|
Сообщ.
#4982
,
|
|
|
|
Цитата korvin @ Зачем? Если не наследуются - значит так нужно. Один-единственный везде используемый корневой класс - это микроскоп-молоток. Единственное, зачем он нужен - это чтобы компилятор добавил его если программист забыл его указать. как вы укажете, что все классы, разработанные например не вами, а кем-то другим, не наследующиеся от SuperBaseClass являются субклассами SuperBaseClass? |
|
Сообщ.
#4983
,
|
|
|
|
Цитата trainer @ Ещё говнокодить очень удобно. Общий базовый класс + rtti + рефлексия и норм. Нах та декомпозиция, сидеть, придумывать чего. Единственное, зачем он нужен - это чтобы компилятор добавил его если программист забыл его указать. |
|
Сообщ.
#4984
,
|
|
|
|
Цитата trainer @ Зачем? Если не наследуются - значит так нужно. Один-единственный везде используемый корневой класс - это микроскоп-молоток. Единственное, зачем он нужен - это чтобы компилятор добавил его если программист забыл его указать. затем, что иначе смысла в таком SuperBaseClass'е нет |
|
Сообщ.
#4985
,
|
|
|
|
Цитата Повстанець @ Ещё говнокодить очень удобно. Общий базовый класс + rtti + рефлексия и норм. Нах та декомпозиция, сидеть, придумывать чего. Сейчас правлю свой проект где-то семилетней давности. Есть истина в замечании, есть ![]() Логика и отображение вроде бы разнесены, но вот декомпозиции практически нет. И самое хреновое, что переделывать долго и невыгодно. |
|
Сообщ.
#4986
,
|
|
|
|
Цитата korvin @ затем, что иначе смысла в таком SuperBaseClass'е нет А в Object'е какой смысл? |
|
Сообщ.
#4987
,
|
|
|
|
Цитата trainer @ Единственное, зачем он нужен - это чтобы компилятор добавил его если программист забыл его указать. бредовое высказывание Добавлено Цитата MyNameIsIgor @ А там есть аргумент? Там есть констатация факта. После чего говорится, что таким образом господа "упрощают повествование".это не относится к квантификации Цитата MyNameIsIgor @ А в чём противоречие то? какое противоречие? ладно, я понял, что вы не читаете моих постов. Добавлено Цитата D_KEY @ А в Object'е какой смысл? возможность писать параметрически-полиморфные функции без костылей типа шаблонов и генериков Добавлено Цитата Повстанець @ Ещё говнокодить очень удобно. Общий базовый класс + rtti + рефлексия и норм. Нах та декомпозиция, сидеть, придумывать чего. ![]() и снова какие-то фантазии |
|
Сообщ.
#4988
,
|
|
|
|
Цитата korvin @ возможность писать параметрически-полиморфные функции без костылей типа шаблонов и генериков А зачем тогда они в шарпе ? У него вроде как есть CObject |
|
Сообщ.
#4989
,
|
|
|
|
Цитата korvin @ возможность писать параметрически-полиморфные функции без костылей типа шаблонов и генериков Мои эмоции в порядке следования: |
|
Сообщ.
#4990
,
|
|
|
|
Цитата korvin @ Цитата D_KEY @ А в Object'е какой смысл? возможность писать параметрически-полиморфные функции без костылей типа шаблонов и генериков Наличие шаблонов и даже дженериков никак не связано с наличием/отсутствием Object. Кстати, в scala можно полностью обойтись без дженериков, работая с абстрактными типами. Однако там все-равно они есть, поскольку во многих случаях они более удобны. |
|
Сообщ.
#4991
,
|
|
|
|
Цитата scorpion @ А зачем тогда они в шарпе ? У него вроде как есть CObject ![]() затем что ![]() ![]() function id (x : Object) : Object { return x ; } вернет объект формального(известного на этапе компиляции) типа Object, хотя фактически там может быть объект любого типа, т.е. система типов C# не позволяет написать функцию id так, чтобы она возвращала объект того же формального типа, каким является аргумент x. приходится использовать приведение типов или дженерики. |
|
Сообщ.
#4992
,
|
|
|
|
Цитата korvin @ вернет объект формального(известного на этапе компиляции) типа Object, хотя фактически там может быть объект любого типа, т.е. система типов C# не позволяет написать функцию id так, чтобы она возвращала объект того же формального типа, каким является аргумент x. приходится использовать приведение типов или дженерики. Звучит как "C# не позволяет написать функцию, возвращающую целое число, приходится иметь костыль под название int". Не приходит в голову, что дженерики - как раз и есть такая возможность? |
|
Сообщ.
#4993
,
|
|
|
|
Цитата korvin @ т.е. система типов C# не позволяет написать функцию id так, чтобы она возвращала объект того же формального типа, каким является аргумент x. приходится использовать приведение типов или дженерики. Система типов Scala позволяет так сделать, зачем там дженерики? |
|
Сообщ.
#4994
,
|
|
|
|
Цитата MyNameIsIgor @ Цитата korvin @ возможность писать параметрически-полиморфные функции без костылей типа шаблонов и генериков Мои эмоции в порядке следования: ![]() напиши мне на C++ функцию id как я указал выше, такую, что ![]() ![]() class T { } class Child : T { void foo() { println("hello"); } } T id (T x) { return x; } void main() { Child c; id(c).foo(); } без шаблонов и кастов. Добавлено Цитата D_KEY @ Система типов Scala позволяет так сделать, зачем там дженерики? ты мне скажи, я скалу не щупал. |
|
Сообщ.
#4995
,
|
|
|
|
Цитата korvin @ Цитата D_KEY @ Система типов Scala позволяет так сделать, зачем там дженерики? ты мне скажи, я скалу не щупал. Вот пример с туториала: ![]() ![]() abstract class AbsCell { type T; val init: T; private var value: T = init; def get: T = value; def set(x: T) : unit = { value = x } } val cell = new AbsCell { type T = int; val init = 1 } cell.set(cell.get * 2) ... def reset(c: AbsCell) : unit = c.set(c.init); Добавлено Вот еще кое-что похожее: ![]() ![]() class C { protected var x = 0; def incr: this.type = { x = x + 1; this } } class D extends C { def decr: this.type = { x = x - 1; this } } ... val d = new D; d.incr.decr; Добавлено Помню, что были более близкие примеры, но сейчас что-то не находится. Сам тоже scala плохо щупал, да и давненько. |