Показать сообщение отдельно
Старый 04.09.2005, 05:33   #1
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Хорошо

Type имя

Параметры
имя = любое допустимое имя переменной
Описание
Если Вы знаете язык Си – TYPE это базовая структура Blitz. Если же Вы не знаете Си, читайте далее.
TYPE – это ваш лучший помощник. Он используется, чтобы создать «коллекцию» объектов, которые имеют общие параметры и могут быстро и легко изменяться.
Представьте себе игру «Космические захватчики». На экране одновременно находится много инопланетян. Каждый из пришельцев имеет несколько, необходимых для него, переменных: абсцисса и ордината, плюс переменная, контролирующая отрисовку (графическое состояние). Далее, Вы могли бы сделать сотни переменных, подобных zahvatchik1x, zahvatchik1y, zahvatchik2x, zahvatchik2y, и т.д. для управления всеми пришельцами, но это не будет изящным решением. Вы могли бы использовать массив, чтобы оперировать ими; zahvatchik(x,y, graphic) и цикл его перебора через FOR ... NEXT – но это слишком трудоёмко! TYPE был создан специально для решения подобных проблем.
TYPE описывает элемент коллекции. Каждый объект в этой коллекции наследует самостоятельную копию переменных, объявленных в TYPE командой FIELD. Каждая переменная каждого элемента типа может быть прочитана индивидуально и может быть легко и быстро итерирована. Используйте команду FIELD, чтобы объявить какие хотите переменные между командами TYPE и END TYPE.
Если Вам это проще – представляйте себе TYPE как БД. Каждый элемент – запись в БД и каждая переменная элемента – поле в записи. Используя команды, подобные BEFORE, AFTER, и FOR ... EACH, Вы можете переместить указатель «БД», чтобы обратится к конкретному элементу типа и восстановить/установить значения его «полей».
Вы не гуру в БД? Нужен другой пример? Ладно. Допустим, Вы готовите аудиторию для речи или какого-либо события, и Вы передвигаете сотни стульев для слушателей. Стулья должны быть в каком-то месте на полу, и некоторые из них должны быть подняты немного выше, чем другие ( посетители-сановники, мэр и другие). Начиная становиться компьютерным гением, вы начинаете придумывать, как можно расположить стулья с наименьшими усилиями. Вы понимаете, что пол клетчатый, как огромная сетка. Это упрощает задачу! Вам нужна только точка на полу, которую Вы разместите на миллиметровке и поместите в ячейку значение, насколько высоко должен быть стул - что базируется на словах босса, о том, где должны сидеть важные люди. Таким образом, для каждого стула, Вы будете иметь ряд и колонку на миллиметровке ( координаты абсциссы и ординаты) и уровень, чтобы установить стул на определённой высоте. Хорошо, мы подготовились. Теперь, даже имея всё на бумаге, мы всё ещё должны делать работу по расстановке всех стульев. После того как вы закончили, допустим, ваш босс подойдёт к Вам и скажет, что «они не отцентрованы справа … сдвинь их все на одну клетку ». О нет! У Вас уже всё расставлено, и даже притом, что это простая вещь – переместить стул на одну клетку вправо (в конце концов, их порядок и высота не будут меняться) – Вы всё ещё должны двигать каждый стул. Уверен, было бы хорошо, если бы Вы могли только взмахнуть рукой и сказать: «Для каждого стула в комнате добавить 1 клетку к его местоположению по х.». Увы, в реальном мире – приступайте к работе – у Вас есть много стульев, которые нужно сдвинуть.
В Blitz Вы, возможно, сделали TYPE с именем STUL и задали бы поля (FIELDs) X,Y, И VISOTA. Вы тогда бы создали нужное Вам число стульев, используя команду NEW(каждый раз, когда Вы вызываете NEW – создаётся новый стул, с его собственными переменными X,Y и VISOTA) и назначали значения x,y координат и высоты соответственно своему решением. В нашем примере выше, когда босс поручил Вам передвигать стулья более чем в одной комнате, Вы, вероятно, стонали про себя. Это – большое кол-во работы! В Blitz мы могли бы использовать 4 строчки кода, чтобы приспосабливать все наши элементы типа STUL к новой позиции ( используя команды FOR ... EACH).
Всё ёще непонятно? Это нормально – TYPE сложен для понимания. Смотрите пример, и мы попробуем показать Вам, как работают типы на практике. Я рекомендую просмотр кода других людей, что так же поможет Вам в освоении типов. Как только вы это сделаете, Вы будете знать, почему Си-программисты без ума от структур, и почему почти все программы Blitz используют их.
Хитрая уловка для целей отладки или для сохранения данных от элементов типов в файл, заключается в использовании команды Str$(). Print Str$() будет выводить значения каждого поля элемента типа, по очереди, отделяя их запятыми и заключая в квадратные скобки, например [15,42, »Fluffy»,500].
Продвинутые программисты знают о хранении типов в «двойном связанном списке».
См. также: Field, New, Null, First, Last, Before, After, Insert, Before.
Пример
; Объявление типа СТУЛ
Type STUL
Field X 
Field Y 
Field VISOTA
End Type 

; Создаём 100 стульев, используя FOR ... NEXT и имя для коллекции типов KOMNATA
For tempx = 1 To 10 
For tempy = 1 To 10 
KOMNATA. STUL = New STUL
KOMNATA\x = tempx 
KOMNATA\y = tempy 
KOMNATA\VISOTA = Rnd(0,10); устанавливаем произвольную высоту от 0 до 10
Next 
Next 

;двигаем все на один (подобно описанному в примере)
For KOMNATA.STUL = Each STUL 
KOMNATA\x = KOMNATA\x + 1 
Next
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Эти 5 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
ABTOMAT (05.01.2009), krlmisha (01.06.2011), pentod65 (10.02.2009), tormoz (30.10.2008), WhiteBlack (29.07.2010)