Меня часто радовало то что в паскале обязательно объявлять переменные в начале функции, это здорово помогает при ее переводе на ассемблер, но еще больше меня это раздражало, так как отнимает дополнительное время и вынуждает создавать кашу объявлений. Ориентироваться в таком коде сложнее, а не проще, потому я сделал возможность объявлять переменные по сишному, в любом месте.
- Код: Выделить всё
- string s := 'hello!!';
 for int i := 0 to 100 do
Несколько лет назад я начал программировать языке python, к хорошему быстро привыкаешь... и естественно в паскале частые begin и end, постепенно начали казаться мусором, потому сделал чтоб do или then вместе с bigin и end можно было заменить просто двоеточием
- Код: Выделить всё
- if pos < 0:
 f['experience']:= 0;
 f['premium_exp']:= Now + 7 days;
 else:
 spacecraft_presets['parentid'][nid] := pos;
 spacecraft_presets.Save;
 for i := 0 to 100:
 f+=1;
 hh+=i;
 Result := fs['level'];
Конечно-же иногда не достаточно операторов, и вообще в одних документах нужны одни операторы, а в других другие, потому сделал возможность положить в operators.ini указать какие у нас будут дополнительные операторы и какую функцию они будут вызывать.
- Код: Выделить всё
- || COr
 && CAnd
 == Equal
 != NotEqual
 <| Less
 |> Greater
 <|= LessOrEqual
 |>= GreaterOrEqual
 from ItemsFrom
 . join
ну и конечно-же их можно использовать в тех файлах которые лежат в одном директории с operators.ini
- Код: Выделить всё
- function GetShopItems(AVKUserId: int64): ansistring;
 begin
 int uid:=vk_users['vk_userid'].ItemIndex(AVKUserId); // Определяем внутренний id игрока по vkid
 if uid < 0 then exit; // Если данного игрока в базе нет - выходим
 // В iUserModels записываем список моделей кораблей которые уже есть у играка
 TIntCol iUserModels := spacecraft_presets['modelid'].ItemsI(ids(spacecraft_presets['parentid'] == uId && spacecraft_presets['_del'] == 0));
 with SpacecraftShop do
 begin
 // в iCanBey составляем список пресетов кораблей на которые у ирока достаточно серебра, золота и опыта
 TBoolCol iCanBey := experiencePrice <|= vk_users['experience'][uid]
 && silverPrice <|= vk_users['silver'][uid]
 && goldenPrice <|= vk_users['gold'][uid];
 // формируем строку ответа, в цикле добавляем параметр каждого корабля из магазина
 int iLoop := 0;
 for spacecraft_presets.pos in shopItems:
 spacecrafts.pos := spacecraft_presets['modelid']; // Номер модели корабля
 boolean iBought := spacecrafts.pos in iUserModels;// в iBought определяем куплена-ли уже данная модель
 Result += spacecraft_presets.pos . ';' // Номер пресета
 . (iCanBey[iLoop] and not iBought) . ';' // Доступен-ли для покупки
 . spacecrafts['fraction'] . ';' // фракция
 . experiencePrice[iLoop] . ';' // Стоимость в опыте
 . silverPrice[iLoop] . ';' // Стоимость в серебре
 . goldenPrice[iLoop] . ';' // Стоимость в золоте
 . spacecrafts['maxspeed'] . ';' // Максимальная скорость
 . spacecrafts['size'] . ';' // Длина
 . spacecrafts['health'] . ';' // Общее hp корабля
 . spacecrafts['shield_mod'] . ';' // hp щита
 . iBought . ';' // Куплен
 . spacecraft_presets['title'] . ';' // Название
 . spacecraft_presets['description'] . '~'; // Описание
 iLoop+=1;
 end;
 end;
Ну да, еще иногда к какой-то величине нужно, например к времени нужно добавить какую-то величину, например время, чтоб лишний раз не считать можно сделать так предварительно задать константы юнитам времени
- Код: Выделить всё
- const
 Week = 7;
 Weeks = 7;
 Day = 1;
 Days = 1;
 Hour = Day/24;
 Minute = Hour/60;
 Second = Minute/60;
 MiliSecond = Second/1000;
 Hours = Day/24;
 Minutes = Hour/60;
 Seconds = Minute/60;
 MiliSeconds = Second/1000;
а потом писать так fDataTime += 1hour+23Minutes или fDataTime += 2 hourі + 1 Minute препроцессор сам перемножит
- Код: Выделить всё
- function Get_User_Info(AVkId: int64): ansistring;
 begin
 with vk_users:
 pos:=vk_users['vk_userid'].ItemIndex(AVKId);
 if pos < 0:
 pos:=additem;
 f['template'] := 'vk_users';
 f['vk_userid'] := AVKId;
 f['level'] := 0;
 f['gold'] := 200;
 f['silver'] := 20000;
 f['experience']:= 0;
 f['premium_exp']:= Now + 7 weeks;
 else:
 Save;
 int nid := spacecraft_presets.addClone(16);
 spacecraft_presets['parentid'][nid] := pos;
 spacecraft_presets.Save;
 Result := fs['level']+';'
 + fs['gold']+';'
 + fs['silver']+';'
 + fs['experience']+';'
 +TimeToStr(fs['premium_exp']);
 end;
Добавлено спустя 12 минут:
Вот собственно..
Данный вариант будет обрабатывать только те файлы, рядом с которыми в папке лежит operators.ini
Сам препроцессор нужно положить в одну папку с ppcx64 и в лазарусе указать его как компилятор или заменить fpc



 
 




