Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.11.08;
Скачать: [xml.tar.bz2];

Вниз

Не явные фичи 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 type

var 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.011 c
8-1198161253
ZXMaster
2007-12-20 17:34
2009.11.08
chroma key DirectShow


8-1199266718
ТупойПрограммер
2008-01-02 12:38
2009.11.08
Запись миди файла


2-1253772111
Sergey2
2009-09-24 10:01
2009.11.08
Vista + TDBGridEh + MsAccess текстовое поле


13-1124174625
inspirion
2005-08-16 10:43
2009.11.08
IIS 5.1 и ASP.NET


4-1221548514
dmitry_12_08_73
2008-09-16 11:01
2009.11.08
Декодирование комбинации клавиш





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский