Форум: "Прочее";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Внизпроцедуры с перечислением одних и тех же типов переменных Найти похожие ветки
← →
Rentgen © (2006-11-15 13:39) [0]Всем привет!
можно, ли в C++ создавать процедуры с перечислением одних и тех же типов переменных?
приходится делать всегда так:void proc (String s1, String s2);
а в Delphi поудобнее:procedure proc (s1,s2:String);
***
если можно, то как?
извинияюсь, что вопрос не по Delphi...
← →
Игорь Шевченко © (2006-11-15 13:39) [1]Нельзя
← →
Rentgen © (2006-11-15 13:41) [2]Очень жаль.
***
интересно, почему отказались испоьзовать такую приятную мелочь?
← →
Юрий Зотов © (2006-11-15 13:52) [3]if (((MyObjectType)obj).MyMethod()) ... // Java
if MyObjectType(obj).MyMethod ... // Delphi
Сравните количество скобок. На фига? Чтобы чтение усложнить?
Не понимаю.
← →
Думкин © (2006-11-15 13:54) [4]А в Х++ вообще жуть. Нет двумерных массивов и вообще удобных контейнеров.
← →
KilkennyCat © (2006-11-15 13:58) [5]Я когда-то предлагал разработать очень удобный язык, имени себя.
чтоб было так:
KilkennyCat(а здесь мы пишем все, что должна делать программка)
и все. причем, скобки можно любые, и даже необязательно одинаковые, и вообще их необязательно... главное KilkennyCat корректно написать.
← →
Algol (2006-11-15 13:58) [6]
> if (((MyObjectType)obj).MyMethod()) ... // Java
>
> if MyObjectType(obj).MyMethod ... // Delphi
>
> Сравните количество скобок. На фига? Чтобы чтение усложнить?
>
Потому что MyObjectType() - это конструктор
← →
Юрий Зотов © (2006-11-15 14:01) [7]> Algol (15.11.06 13:58) [6]
А где же Вы в этом примере увидели вызов конструктора?
← →
Algol (2006-11-15 14:03) [8]
> приходится делать всегда так:
> void proc (String s1, String s2);
Эта конструкция делает более надежный код, поскольку если бы синтаксис допускал void proc (String s1, s2); то в таком случае непонятно, то ли программист имел ввиду что оба параметра - типа string, то ли он просто забыл указать тип для s2
← →
Alkid © (2006-11-15 14:03) [9]
> Сравните количество скобок. На фига? Чтобы чтение усложнить?
AFAIK для реализации шаблонов в C++ было сделано так, что бы разные операции имели разное синтаксическое выражение, что бы без знания природы символов, задействованых в операции, можно было делать выводы о природе операции. Например, если мы в Delphi напишем a(b), то эта конструкция может означать как минимум вызов подпрограммы a с параметром b, либо приведение выражения b к типу a. Вызов подпрограммы в C++ (а с него пошёл С-подобный синтаксис, применённый в Java) - тот же случай. Конструкция a(b) всегда означает вызов, а конструкция (a)b - приведение типов.
← →
Algol (2006-11-15 14:04) [10]
> А где же Вы в этом примере увидели вызов конструктора?
Я имел ввиду, что в Си-подобных языках нельзя использовать конструкцию
типа MyObjectType(obj).MyMethod потому что такая конструкция уже используется для вызова конструктора объекта.
← →
Думкин © (2006-11-15 14:04) [11]
> Algol (15.11.06 14:03) [8]
забыл указать тип. Оригинально.
← →
Alkid © (2006-11-15 14:07) [12]
> Я имел ввиду, что в Си-подобных языках нельзя использовать
> конструкцию
> типа MyObjectType(obj).MyMethod потому что такая конструкция
> уже используется для вызова конструктора объекта.
Не правда ваша. В языках, где используется ссылочная семантика объектов (Java и почти C#), конструкция MyObjectType(obj) - это приведение ссылки obj к типу MyObjectType, что, кстати, происходит с Run-Time проверкой совместимости типов и легальности конверсии. Для вызова конструктора здесь не хватает слова new.
← →
Юрий Зотов © (2006-11-15 14:08) [13]> Alkid © (15.11.06 14:03) [9]
Разумно, спасибо.
Но остаются скобки вif (выражение) оператор
. Зачем они?
← →
clickmaker © (2006-11-15 14:12) [14]
> остаются скобки в if (выражение) оператор. Зачем они?
а я даже в дельфи со скобками пишу. Когда скачешь с языка на язык, хочется какого-то единообразия, в голове хотя бы. Но иногда в плюсах начинаю := писать вместо =, а в Д == вместо =
← →
Alkid © (2006-11-15 14:15) [15]
> Но остаются скобки в if (выражение) оператор. Зачем они?
Затем же, зачем в Delphi используется ключевое слово "then". Для отделения выражения условия от кода ветки исполнения.
В принципе, если вдуматься в синтаксическую организацию выражений языков Object Pascal и C/C++ и им подобных, то необходимости нет ни в скобках, ни в ключевом слове "then". Причина этому в заключается в том, что выражение однозначно сворачивается в одну ветку ситнаксического дерева программы, сколько бы не было в нём пробелов, и пробелов между последним символом условия и первым символом кода ветки.
Так что пока моё мнение таково - эти синтаксические ухщирения не вызваны строгой необходимостью, а призваны лишь улучшить читаемость кода. Что здесь лучше - скобки или "then" - это уже дело вкуса.
← →
Думкин © (2006-11-15 14:16) [16]
> clickmaker © (15.11.06 14:12) [14]
Второе вообще зло. В ПХП несколько раз напарывался в условиях. Стандартный затык.
Мне вот for там не нравится. Спрашивается - а на кой тогда еще и while?
← →
Alkid © (2006-11-15 14:16) [17]
> а я даже в дельфи со скобками пишу. Когда скачешь с языка
> на язык, хочется какого-то единообразия, в голове хотя бы.
> Но иногда в плюсах начинаю := писать вместо =, а в Д ==
> вместо =
Кстати да. Я тоже всегда в Delphi пишу if (условие) then.
А так же при вызове пишу () .
← →
data © (2006-11-15 14:16) [18]Юрий Зотов © (15.11.06 14:08) [13]
например, в С++ возможны вот такие 2 конструкции (согласна, что это изврат, но тем не менее):
if (i= j ++) i;
if (i= j) ++ i;
← →
Юрий Зотов © (2006-11-15 14:18) [19]> Alkid © (15.11.06 14:15) [15]
Убедили.
← →
data © (2006-11-15 14:18) [20]я сама конечно, такое никогда не использую (особенно присваивание в условии:))
← →
Alkid © (2006-11-15 14:19) [21]
> например, в С++ возможны вот такие 2 конструкции (согласна,
> что это изврат, но тем не менее):
> if (i= j ++) i;
> if (i= j) ++ i;
Кстати, да - вот он контр пример для моих слов. В таком случае есть необходимость ставить разделитель между условием и исполняемым кодом ветки.
← →
Prohodil Mimo © (2006-11-15 14:28) [22]Юрий Зотов © (06.11.15 14:08) [13]
Но остаются скобки в if (выражение) оператор. Зачем они?
Это Delphi/Pascal такой умный, что за нас скобки подставляет. :о)
FB и тот скобки требует, что по началу было очень не удобно.
← →
Alex Konshin © (2006-11-15 14:31) [23]Юрий, попробуй в свою очередь объяснить, зачем в Дельфи такой ужасный синтаксис record с case"ами. :)
← →
data © (2006-11-15 14:33) [24]
> Alex Konshin © (15.11.06 14:31) [23]
а почему ужасный case? мне сишный case меньше нравится)
← →
Alex Konshin © (2006-11-15 14:37) [25]Да и заодно (раз уж тебе так скобки не нравятся), обоснуй дурацкие приоритеты логический операций и операций сравнения, которые приводят к необходимости всегда указывать скобки в конструкциях типа (это я еще простой случай привожу):
if (x<0) or (x>=1) then ...
← →
Alkid © (2006-11-15 14:40) [26]А вообще, самый лучший синтаксис - это эссе "О нужном ПО" в свободной форме. Потому что какой бы синтаксис не придумали, найдутся те, кому он нравится и те, кому - нет. :)
← →
clickmaker © (2006-11-15 14:46) [27]меня тут как-то спросили: "такой сишный код скомпилится?"
delete a, b, c;
Ответил нет, оказалось - да. Причем, в хелпе ничего не написано насчет перечисления операндов. Вот так дураком и помрешь )) За такие вот фишки недолюбливаю Цэ иногда...
← →
Alex Konshin © (2006-11-15 14:46) [28]> data © (15.11.06 14:33) [24]
> > Alex Konshin © (15.11.06 14:31) [23]
> а почему ужасный case? мне сишный case меньше нравится)
Я имею в виду case в record.
Ну, ладно, оставим на их совести перегрузку ключевого слова case, но зачем при этом его синтаксис отличается от обычного case (нет завершающего end), и зачем нужно указывать бесполезные типы (да и цифирки не нужны)?
TVarData = packed record
case Integer of
0: (VType: TVarType;
case Integer of
0: (Reserved1: Word;
case Integer of
0: (Reserved2, Reserved3: Word;
case Integer of
varSmallInt: (VSmallInt: SmallInt);
varInteger: (VInteger: Integer);
varSingle: (VSingle: Single);
varDouble: (VDouble: Double);
varCurrency: (VCurrency: Currency);
varDate: (VDate: TDateTime);
varOleStr: (VOleStr: PWideChar);
varDispatch: (VDispatch: Pointer);
varError: (VError: HRESULT);
varBoolean: (VBoolean: WordBool);
varUnknown: (VUnknown: Pointer);
varShortInt: (VShortInt: ShortInt);
varByte: (VByte: Byte);
varWord: (VWord: Word);
varLongWord: (VLongWord: LongWord);
varInt64: (VInt64: Int64);
varString: (VString: Pointer);
varAny: (VAny: Pointer);
varArray: (VArray: PVarArray);
varByRef: (VPointer: Pointer);
);
1: (VLongs: array[0..2] of LongInt);
);
2: (VWords: array [0..6] of Word);
3: (VBytes: array [0..13] of Byte);
);
1: (RawData: array [0..3] of LongInt);
end;
← →
Algol (2006-11-15 14:46) [29]
> В языках, где используется ссылочная семантика объектов
> (Java и почти C#), конструкция MyObjectType(obj) - это приведение
> ссылки obj к типу MyObjectType, что, кстати, происходит
> с Run-Time
Не совсем понял о чем Вы...
Вот пишу код на C#:
object o;
MyClass r = MyClass(o);
Компилятор выдает ошибку:
Error 4 "Tester.Form1.MyClass" is a "type" but is used like a "variable"
Каким образом я могу применить MyClass(o) для приведения типа?
← →
clickmaker © (2006-11-15 14:48) [30]
> Каким образом я могу применить MyClass(o) для приведения
> типа?
r = (o as MyClass);
r = (MyClass)o;
← →
Игорь Шевченко © (2006-11-15 14:49) [31]
> Каким образом я могу применить MyClass(o) для приведения
> типа?
(MyClass)o
← →
Alkid © (2006-11-15 14:51) [32]
>
> Не совсем понял о чем Вы...
> Вот пишу код на C#:
> object o;
> MyClass r = MyClass(o);
> Компилятор выдает ошибку:
> Error 4 "Tester.Form1.MyClass" is a "type" but is used like
> a "variable"
>
> Каким образом я могу применить MyClass(o) для приведения
> типа?
Блин, и правда - ошибся. Приведение будет как (MyClass)o или o as MyClass
Прошу прощения.
← →
Юрий Зотов © (2006-11-15 14:56) [33]> Prohodil Mimo © (15.11.06 14:28) [22]
Спасибо за разъяснение...
:о)
Но оно и так понятно. Речь же идет о минимальном синтаксисе.
> Alex Konshin ©
Алекс, я не могу объяснить, почему ужасно то, что я ужасным не считаю (это о синтаксисе вариантных записей).
Впрочем, я не могу объяснить, почему ужасно и то, что я тоже считаю ужасным (это о приоритете операций отношения).
:о)
← →
Alex Konshin © (2006-11-15 15:05) [34]
> Впрочем, я не могу объяснить, почему ужасно и то, что я
> тоже считаю ужасным (это о приоритете операций отношения).
На самом деле я могу это объяснить. Я знал правильный ответ :)
Дело в том, что в Pascal для битовых операций и для логических операций применяются одни и те же ключевые слова. И приоретет назначен как для битовых операций, хотя на мой взгляд они применяются гораздо реже, чем логические (я уверен, что большинство начинающих даже и не знают, что такое "битовые операции"). В других языках это не так.
← →
Юрий Зотов © (2006-11-15 15:14) [35]> Alex Konshin © (15.11.06 15:05) [34]
Но стоило лишь сделать приоритет операций отношения выше AND - и все стало бы нормально.
← →
Anatoly Podgoretsky © (2006-11-15 15:21) [36]> KilkennyCat (15.11.2006 13:58:05) [5]
Red Cat
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.044 c