Текущий архив: 2009.11.08;
Скачать: CL | DM;
Вниз
Не явные фичи Delphi. Найти похожие ветки
← →
Б (2009-09-03 14:32) [0]Оказывает есть вот такая документированная фича обращения к элементу массива:
Type
TArr = packed array [byte] of
packed record
X: integer;
Y: integer;
Z: integer;
End;
Var
A: TArr;
. . . . .
A(.10.).X:= 1000; // A[10].X:= 1000;
А ещё в этом духе, что нибудь есть? ;)
← →
oxffff © (2009-09-03 14:34) [1]
>
> Б (03.09.09 14:32)
Вычитал у Nick Hodges"a?
← →
Б (2009-09-03 14:38) [2]Нет.
← →
test © (2009-09-03 14:38) [3]Б (03.09.09 14:32)
Тебе что именно за фичи нужны? Работы с массивом или что?
← →
Rouse_ © (2009-09-03 14:38) [4]Хе... Работает, только красным подсвечивает :)
← →
test © (2009-09-03 14:39) [5]Кстати версия какая?
← →
Б (2009-09-03 14:40) [6]> Тебе что именно за фичи нужны? Работы с массивом или что?
Да любые.
← →
Б (2009-09-03 14:41) [7]> Кстати версия какая?
6-ка.
← →
Б (2009-09-03 14:42) [8]И объявить массив таким же способом можно:
Type
TArr = packed array (.byte.) of byte;
← →
Kolan © (2009-09-03 14:51) [9]Супер, конечно, секретный синтаксис.
Из справки D 2009:The following table shows equivalent symbols:
Special symbol Equivalent symbols
[ (.
] .)
{ (*
} *)
← →
Kolan © (2009-09-03 14:52) [10]Да, другие «неявные» фичи нужно искать по словам
Fundamental Syntactic Elements
← →
Б (2009-09-03 14:55) [11]Про комменты во всех книжках по Делфям написанно, а про массив - нет.
← →
Kolan © (2009-09-03 15:03) [12]Все эти хитрые штуки использовать не стоит, чтобы не вводить людей в заблуждение.
Вот, например, амперсанд. Не хотел бы я разбирать код, где он так используется:
Extended Identifiers
You might encounter identifiers (e.g. types, or methods in a class) having the same name as a Delphi language keyword. For example, a class might have a method called begin. Another example is the CLR class called Type, in the System namespace. Type is a Delphi language keyword, and cannot be used for an identifier name.
If you qualify the identifier with its full namespace specification, then there is no problem. For example, to use the Type class, you must use its fully qualified name:var TMyType : System.Type; // Using fully
qualified namespace // avoides ambiguity with
Delphi language keyword.
As a shorter alternative, the ampersand (&) operator can be used to resolve ambiguities between identifiers and Delphi language keywords. If you encounter a method or type that is the same name as a Delphi keyword, you can omit the namespace specification if you prefix the identifier name with an ampersand. For example, the following code uses the ampersand to disambiguate the CLR Type class from the Delphi keyword typevar TMyType : &Type; // Prefix with
"&" is ok.
← →
Григорьев Антон © (2009-09-03 15:03) [13]
> Kolan © (03.09.09 14:51) [9]
> Супер, конечно, секретный синтаксис.
Это ещё из стандартного Паскаля пришло. Не на всех терминалах были символы []{}, вот и пришлось Вирту придумать замену, чтобы Паскаль можно было реализовывать и на таких терминалах тоже.
← →
Kolan © (2009-09-03 15:12) [14]Спасибо, Антон, за разъяснения.
← →
Б (2009-09-03 15:17) [15]Григорьев Антон
Я знаю, Вы в своей книге подробно описали тему разбора математич. выражений, оказывается можно не особо вдаваясь в подробности написать след. калькулятор: (Поддерживает скобки, тригонометрические и др. функции)
function Calc(const CalcStr: string): string;
var
v : Variant;
begin
v := CreateOleObject("MSScriptControl.ScriptControl");
v.Language := "JScript";
Result := v.Eval(CalcStr);
v := Unassigned;
end;
Всё! ;)
← →
Ega23 © (2009-09-03 15:22) [16]try..finally не забудь.
← →
wicked © (2009-09-03 15:26) [17]
> Я знаю, Вы в своей книге подробно описали тему разбора математич.
> выражений, оказывается можно не особо вдаваясь в подробности
> написать след. калькулятор: (Поддерживает скобки, тригонометрические
> и др. функции)
а потом скормить этому калькулятору код, где будет обращение к WScript.CreateObject("Scripting.FileSystemObject")
← →
Григорьев Антон © (2009-09-03 15:55) [18]
> Б (03.09.09 15:17) [15]
Да, действительно, зачем учить географию, если есть извозчики, которые знают, куда ехать.
← →
oxffff © (2009-09-03 15:58) [19]
> Григорьев Антон © (03.09.09 15:55) [18]
использовалась грамматика Операторного предшествования?
← →
TIF © (2009-09-03 16:13) [20]> A(.10.).X:= 1000; // A[10].X:= 1000;
Ну вы даёте... стране угля :)
> Про комменты во всех книжках по Делфям написанно, а про
> массив - нет.
Книжки надо читать другие. Фаронова лучше всего, для начала:
http://delphikingdom.com/asp/viewitem.asp?catalogid=887
И не по Delphi книжки, а по Pascal. Изначальное изучение сразу Delphi портит людей :)
PS: а вообще (. и .) вещь полезная и интересная, хоть и пригодится в одном случае из ста, а в остальных будет только мешаться
В этом плане (* и *) куда удобнее для формирования различных комментариев большом модуле, звёздочки как раз очень хорошо подходят для наглядного выделения отдельных кусков кода
← →
Б (2009-09-03 16:21) [21]> Книжки надо читать другие. Фаронова лучше всего, для начала:
Я эту книгу и привёл в пример.
> И не по Delphi книжки, а по Pascal. Изначальное изучение сразу Delphi портит людей :)
Дак, я ещё в школе на нём немного писал, а потом мы перешли на Visual Basic. Но я остался на Delphi. ;)
> (* и *)
Ими я разделяю код на смысловые блоки. Ну очень наглядно.
← →
Б (2009-09-03 16:23) [22]Да и не зачем вообще использовать " (. и .) " - это же всего лишь некий прикол. ;)
← →
Григорьев Антон © (2009-09-03 16:27) [23]
> oxffff © (03.09.09 15:58) [19]
> использовалась грамматика Операторного предшествования?
Нет, метод рекурсивного спуска.
← →
TIF © (2009-09-03 16:38) [24]> Я эту книгу и привёл в пример.
Я, наверное, уже и правда плохо вижу, надо поменьше облучаться у монитора :)
Перечитал тему 2 раза. Упоминание книги Антона Григорьева - вижу. Упоминание книги Фаронова - нет :-(
← →
Б (2009-09-03 16:41) [25]Ну та, что вторая справа... ;) Синяя короче.
← →
Псалтырь © (2009-09-03 20:01) [26]У Керка на сайте есть тесты. второй вопрос. а для с-изыкоф и не такое понапридумано... трмграффы там, и прочие бесовские изреченья
← →
TStas © (2009-09-08 20:19) [27]А я не дочитав до топика, где написано, что это вариант синтаксиса, сам догадался, что это вариант. Что [ = (.
А Си-подобных языцех можно же доопределять синтаксис. ИМХО несть се добро. Там же +, ++, += это операторы, которые не имеют отношения друг к другу. Х += У ведь это не синоним Х = Х + У.
← →
DrPass © (2009-09-09 00:27) [28]
> TStas © (08.09.09 20:19) [27]
> А Си-подобных языцех можно же доопределять синтаксис
В самих языках нельзя (если не считать перегрузку операторов), но препроцессоры обычно много умеют. Хотя, как по мне, препроцессор, макросы и иже с ним - куда большее зло, чем оператор goto...#define TRUE FALSE //приятной отладки, суки
← →
Германн © (2009-09-09 01:04) [29]
> Хотя, как по мне, препроцессор, макросы и иже с ним - куда
> большее зло, чем оператор goto...
>
+1
Макросы хороши в ассемблере. Кстати и "goto" тоже. :)
← →
test © (2009-09-09 08:02) [30]DrPass © (09.09.09 00:27) [28]
Помойму там было
#define TRUE rand(1) //приятной отладки суки
(*не помню как у них random пишется*)
← →
DrPass © (2009-09-09 12:33) [31]
> test © (09.09.09 08:02) [30]
На башорге было #define TRUE FALSE, но твой вариант куда жестче. Я, когда буду увольняться, так и сделаю ;-)
← →
Омлет (2009-09-14 03:51) [32]Оказывается, не все знают, что в with можно указать несколько записей, и могут не понять простой и красивый код:
with AddObjectBtn, ClientToScreen(Point(0, Height)) do
ObjectsPopup.Popup(X, Y);
:)
← →
Омлет (2009-09-14 04:07) [33]> test © (09.09.09 08:02) [30]
> #define TRUE rand(1)
Это легко отловить. Надо вот так:#define true ((rand() % 1000) ? true : false) // ха-ха-ха ^-^
Найдут нескоро ))
← →
pasha_golub © (2009-09-14 10:52) [34]
> Омлет (14.09.09 03:51) [32]
>
> Оказывается, не все знают, что в with можно указать несколько
> записей
Иногда так оно нечитабельно, шо подвесил бы "за гак ребром"
← →
sniknik © (2009-09-14 11:05) [35]> Иногда так оно нечитабельно
и порождает трудноуловимые ошибки, например с пересечением одноименных переменных, особенно когда такая явно объявлена, и ты ожидаешь ее использования, а то, что такая же есть в объекте(а то и в обоих) указанном в with далеко не очевидно (ну вот так сверху взглянешь и не поймешь, в код надо "вникать", что особенно "приятно" когда его на проверку много и он весь такой, а ошибки только иногда, и не очевидные, с "вылетом", а логические, вроде - временами не то значение рассчитывает...).
← →
pasha_golub © (2009-09-14 18:10) [36]
> и порождает трудноуловимые ошибки
Ага, про них родненьких.
← →
Игорь Шевченко © (2009-09-14 18:14) [37]И макросы в препроцессоре и with с несколькими выражениями приносят пользу, будучи употреблены надлежащим образом в надлежащее время.
А грубее, так дай дураку член стеклянный - и член разобьет, и руки порежет.
Отсутствие макросов препроцессора нисколько не мешает писать кривые программы, это я, как потомственный краевед, утверждаю.
Страницы: 1 вся ветка
Текущий архив: 2009.11.08;
Скачать: CL | DM;
Память: 0.54 MB
Время: 0.006 c