• 200 лучших книг по версии BBC

  • ВОЛГА / VOLGA, “Дом” 3.02.06

  • // куски справочьника ...

    // Механизмы (самодельные типажы).
    // ----------------- 15

    Механизм это возможность внедрить в код свой сложный типаж.
    Програмист записывает разметку-чертёж механизма и после этого можно создавать
    экзэмпляры такого механизма подобно обычьным переменкам.

    // простой пример механизма..
    мех ти.пози // ключевое слово и название типажа-механизма.
    { ф32 х; ф32 у; ф32 з; // хикс, угрик, зэд - это три обше-доступных свойства.
    }
    ти.пози !! пози1; // создали переменку - экзэмпляр механизма "ти.пози".
    пози1..х = 0; // дву-точие это знак "принадлежность".
    пози1 .. у = 0.5 ; // (пози_один) (его) (угрик) (получяет) (ноль-пять) (фин)
    пози1..з = 25;

    Можно внедрить правило..
    Все переменки созданые от чертежа механизма нужно называть "экзэмплярами".

    ---------

    мех Нечьто1
    { // начяло разметки в чертежэ механизма.

    чи32 первое_свойство = 15;
    // знак "создать" не нужэн - потому-что конкретно здесь мы ничего не создаём.
    }

    Внутри механизмов как-бы нет "переменок", потому-что механизм обладает лиш Свойствами
    для того чтобы считывать значения с нужного учястка своей сложной ячейки памяти.
    Имена свойств следуют после имени экзэмпляра механизма через дву-точие.
    Сам знак дву-точия называется "принадлежность". (двое-точие или две точки подряд)

    Нечьто1 !! экзэмпляр_нечьто1;
    эн = экзэмпляр_нечьто1..первое_свойство;
    // пользование свойствами механизма такое-жэ как и у обычных переменок.
    Читается дву-точие (знак принадлежность) в неком литературном стиле.
    Например, "броне.машынка..колесо1", читаем как "броне машынка её колесо один".
    Например, "поезд..вагон2", читаем "поезд его вагон два".

    ------------

    // далее более сложный механизм и пояснялки получились в-разнобой - нужно прочитать
    // все строки и после этого обшяя картинка можэт проясниться.

    мех слож_мех
    { // начяло разметки механизма.

    нутро // начяло блока свойств, которые нужны для внутреней рутины механизма.
    {
    чи31 броня = 1; // намечяем первое свойство механизма

    чи32 хит.бар;
    хит.бар = 5 + броня; //свобода.
    // Изначально, в редакторе установлена опцыя, чтобы блокировать подобную свободу, но
    // эту опцыю можно отключить. В любом случии, сложные выражэния по получению свойствами
    // изначяльных значений рекомендуется добавлять в "рутину конструкторов".

    проца некий.личьный.метод() { } // процэдура из внутреней рутины механизма.

    // Всякие реальные приборы могут содержать подключяемые к ним провода.
    // Механизмы в языке "яма плюс" могут подключять к себе глобальные переменки и процэдуры.
    // Ключевые слова "агент" и "допуск", только в блоке "нутро", утверждают особо-именованые
    // глобалки на тесное взаимодействие с механизмом, который и владеет блоком "нутро".

    агент .спец.процэдура; //агентом можэт быть только "причястная к механизму глобалка".
    агент .название_тайной_глобалки; // только наш механизм пользуется такой глобалкой.
    //"название_тайной_глобалки" - такого имени не можэт быть у свойств этого механизма.

    допуск название_обычьной_публичьной_процэдуры; //в какой глобальной процэдуре
    //можно пользоваться здешними нутро-свойствами-методами "как внутри механизма".

    статус; // упоминание - мы будем пользоваться таким "ключевым свойством" и оно не публичьное.
    логном; // упоминание второго ключевого свойства - тожэ будем пользоваться.
    /*
    Однако нижэ нет примера использования этих свойств, но вот краткая пояснялка..
    - "статус" нужэн, чтобы в масиве отличять "пока-не-рождёные" игровые предметы (статус ноль).
    А если статус не ноль, то "подразумевает модификацыю предмета" (юнит-пехота или юнит-танк).
    - "логном" - это логический номер и сюда автоматически будет поставлен уникальный номер,
    который можно использовать для сложных и надёжных линковок любых предметов.
    */

    } //Скобки такого блока (нутро) отличяются цветом от нормальных блоков.

    // остальные свойства (вне нутра) подобны клавишам на поверхности механизма.
    чи31 бум;
    чи31 бумбум;

    проца некий.метод( чи31 а) // обше-доступная процэдура
    {
    бум += а; броня += 1;
    }
    // Тела всех процэдур, которые принадлежат механизму должны быть внутри блока "мех".
    // Остальные процэдуры, которые привязали к механизму, останутся глобальными.

    // в концэ разметки авто-распологаются конструкторы и деструктор..
    старт || ( ) { } // "старт" это ключевое слово // умолчятельный конструктор без параметров.
    старт || ( список_параметров) { } // конструктор // две палочьки здесь обязательны.
    старт || ( список_параметров2 ) { } // конструктор для какого-то третьего случия.
    копия || () { } // конструктор копирования. (один на все случии)
    финиш ~~ () { } // деструктор // две тильды обязательны (и они как название).

    } //конец разметки
    лимит 1; // можно создать лиш один экзэмпляр такого механизма.

    слож_мех !! мех2; // создан один экзэмпляр.

    Смысл глобалок связаных с механизмом (причястных) в том, что они позволяют экзэмплярам
    некого механизма манипулировать обшими (для экзэмпляров) элементами.
    При этом, сам механизм остаётся лиш чертежом, который как-бы не сушествует.

    чи31 !! слож_мех.название_тайной_глобалки = 0;
    Так мы создали вроде-бы глобальную переменку, но она упомянута "агентом" и у неё первая
    чясть имени (слож_мех) повторяет название механизма. Поэтому только сам механизм и те
    процэдуры, которые имеют "допуск к нутру механизма" могут пользоваться этой глобалкой.

    чи31 !! слож_мех.публичьная_глобалка = 0;
    Первая чясть названия глобалки повторяет название типажа механизма и авто-помошник будет
    считать такую глобалку "причястной к этому механизму" - это видно визуально и если
    програмист ошибся и не желает "причястности", то ему лучшэ назвать глобалку чють иначе.
    // Редактор кода "Маргинал" позволяет легко и надёжно менять названия в любое время.

    Если в обычьной процэдуре требуется использовать нутро-свойства, то для этого нужно
    пропечятать отдельное указание "допуск" и название той процэдуры (в блоке "нутро").

    проца слож_мех.спец.процэдура() // эта процэдура агент для механизма "слож_мех"
    {
    .публичьная_глобалка = 2; // это правильно // подразумеваем слож_мех.публичьная_глобалка
    слож_мех.публичьная_глобалка = 3; //так тожэ правильно.

    // броня += 1; бум += 1; это ошыбки.
    // Эти названия являются свойствами и должны быть "от экзэмпляра".
    // слож_мех..бум = 2; тожэ ошыбка, потому-что "слож_мех" это чертёж, а не экзэмпляр.

    мех2..бум += 1; // так можно.
    //мех2..броня += 1; // ошыбка - эта процэдура хоть и агент, но допуска не имеит.
    // .название_тайной_глобалки = 5; ошыбка - аналогия с "броня".
    }

    проца слож_мех.просто.процэдура() // это обычьная процэдура, но связана со "слож_мех"
    {
    // .название_тайной_глобалки = 5; ошыбка - процэдура не имеит допуска к нутру.
    // .спец.процэдура(); ошыбка - нету допуска.
    .публичьная_глобалка = 7; // А это правильно.
    }

    проца некая_процэдура() // это обычьная процэдура
    {
    // .публичьная_глобалка = 8; // ошыбка - здесь нет связи со "слож_мех"
    слож_мех.публичьная_глобалка = 8; // правильно.
    мех2..публичьная_глобалка = 8; // тожэ правильно.
    мех2..просто.процэдура(); //глобалки, связаные с механизмом от любого экзэмпляра можно.
    мех2..бум += 1;
    //мех2..броня += 1; // ошыбка - нет допуска
    }

    проца название_обычьной_публичьной_процэдуры()
    { // процэдура не связана с механизмом, но зато у неё есть допуск к нутру "слож_мех".
    // Связи и допуски особо визуализируются авто-помошником - если весь список
    // не помешяется в пару строк, то можно кликать и увидеть окошко с полным списком.
    мех2..броня += 1;
    мех2..спец.процэдура();
    слож_мех.название_тайной_глобалки = 9;
    }

    ------------
    // Рутина конструкторов..
    Этот учясток устройства механизмов сильно зависит от Авто-помошника (и редактора Маргинал).
    Тоесть, язык "Яма плюс" не можэт восприниматься без "роботической подыдержки".

    Процы-конструкторы не имеют имени - все отличия упираются в "список параметров".
    Весь код этих процэдур автоматический, но туда можно вносить "ручьные вкрапления".
    Всё что выглядит подозрительным, авто-помошник там не разрешыт разместить.
    Событие "зарождения" нового виртуального предмета - это святое. хы-хы.

    Ключевые слова "старт", "копия", "финиш" обозначяют полу-автоматические процэдуры.
    Во время работы над кодом в редакторе Маргинал, все изменения и дополнения в них
    производятся через особые диалоги.
    // Подобные процэдуры сохраняются в текст всегда в "усечёном виде".
    // Тоесть, при считывании из текста, Авто-пом снова сам востановит все "сокрытости"
    // и проверит какой-то свободно-добавленый текст (добавленый вне Маргинала).

    Квиток (держатель куска памяти) авто-копируется как новый владелец новой памяти,
    поэтому отпадает нужность городить зашиту от "утечек памяти".

    В "яма плюс" нельзя пере-прошыть оператор "получение", но в механизмах, метод "копия"
    совмешяет в себе задачи "конструктор си-копирования" и "конструктор си-получения".
    Програмист может внести в разметку механизма строку "копия фальш;" - это значит запрет
    на события копирования - экзэмпляры такого механизма придётся передавать в процэдуры
    как синоним, и нельзя с ними использовать оператор "получение".

    -------------
    Если в теле процэдуры механизма мы запишэм выражэние..
    гость этот;
    Тогда процэдура становится "акуратной" - в ней вызываются другие акуратные процы
    и мы не можэм поцарапать свойства механизма в котором "сработала акуратная процэдура".
    // Можно записывать в теле процэдур выражэния "гость название_параметра;".

    мех Нечьто2
    {
    нутро { } // пустой блок - в тексте не обязателен, но в Маргинале подобные пустые блоки
    // всегда вверху разметки для наглядности.

    // Свойства могут повторять названия свойств из других механизмов.
    чи32 первое_свойство = 15;
    чи32 режым = 0;
    чи31 самокат = 0;

    // Некоторые свойства могут быть описаны сложными приёмами, чтобы получить много имён,
    // которые авто-помошник можэт предлагать в разных логических ситуацыях.
    // Например, можно оформить зависимость названия свойства от значения в другом свойстве.
    первое_свойство мех.логик() // псевдо-процэдура для пояснения вариацый названия.
    { // Здесь внутри нельзя использовать название "первое_свойство".
    турист( режым)
    { // итоговые версии названий должны быть уникальными среди названий этого механизма.
    лес 1.. итог первое_ля; // "первое_свойство" альтэрнативно выдаётся как "первое_ля"
    лес 2.. итог трам1;
    лес 3.. итог бур1;
    } // все другие варианты оставляют название как "первое_свойство"
    }
    // первое_свойство мех.логик( а) // ОШЫБКА - возможна лиш одна логика для одного свойства.

    самокат мех.логик( а) // псевдо-параметром можэт быть лиш "значение свойства".
    { // Ставим любую букву, чтобы подразумевать "нашэ значение" внутри рутины альтэр-названий.
    турист( а)
    {
    лес 1.. итог само1; // если "самокат" хранит единицу, то его альтэр имя это "само1"
    лес 2.. итог само2;
    лес глоб_конст_пимпум.. итог; // итог #;
    //лес глоб_конст_пимпум.. итог глоб_конст_пимпум; // эквивалент строки вышэ.
    //лес 5.. итог; // ошыбка - название не можэт быть "5"
    }
    }
    // Альтэр-названия можно использовать в коде и в скриптах. Они должны помогать логике.
    // Механизм в разных режымах работы - у его свойств могут быть разные имена.
    // На самом деле, в любое время правильно срабатывает любое из названий свойства.

    чи32 бума.бум;

    ##бума.бум; //авто-пом заготовит кейсы, чтобы пользоваться этим свойством "через номерок".
    этот##бума.бум; // возможно так правильней и надёжней.
    // Ключевое слово "этот" означяет экзэмпляр, от имени которого вызван метод или свойство.

    проца абыр( Нечьто2 другой гость) // некий метод механизма
    {
    гость этот; // наш экзэмпляр получяет имунитет к его искривлению.
    /*
    другой..бума.бум = 4; // ошыбка - нельзя исправлять гостя.
    этот..бума.бум = 5; // ошыбка - нельзя исправлять гостя (хозяин процэдуры стал гостем).
    бума.бум = 5; // ошыбка - потому-что эквивалент "этот..бума.бум"
    // В теле методов можно записывать "свои свойства" с упоминанием "этот.." или без
    */
    п( бума.бум =-= другой..бума.бум) вызвать_хикс_процу(); // вот на это гости сгодятся.
    }

    // здесь авто-блок с конструкторами ...
    старт || ( чи32 ржм) // добавили свой вариант
    {
    режым = ржм; // чтобы при рождении экзэмпляра задавать режым сушествования.
    }

    }

    Нечьто2!! экзэмпляр_нечьто2|| ( 2); //тот-самый наш дополнительный конструктор с режымом.

    Нечьто2!! эк22||(); // умолчятельный конструктор.
    Нечьто2!! эк22(); // умолчятельный конструктор.
    Нечьто2!! эк22; // умолчятельный конструктор - самый короткий вариант.

    эк22..абыр( экзэмпляр_нечьто2);
    // В даном вызове, в теле "абыр" под словом "этот" подразумевается "эк22".

    эн = Нечьто2##бума.бум; // получить "подготовленый номер детали" в механизме.
    эн = экзэмпляр_нечьто2##бума.бум; // эквивалент вышэ
    эн = эк22##бума.бум; // эквивалент вышэ

    ---------
    Свойства из блока "нутро" печятаются в чужых процэдурах как и остальные (публичьные),
    но сразу после пропечятки они авто-помошником заменяются на процэдуру с "похожым названием".
    А если это происходит впервые (первый "внести" или первый "читать"), то авто-помошник
    говорит "деталь-свойство" является "нутро-зависимым" - предлагает диалог с тремя
    вариантами решэния проблемы..
    1. Внедрить предложэную процэдуру (считывания или вкладывания значения).
    2. Внедрить процэдуру с лимитом как "единица" (как-бы "только здесь" вызов разрешон).
    3. Отменить предложэную процэдуру - прогер ошыбся, а сейчяс не хочет "проявлять деталь".

    эк22..первое_свойство = 4;
    эк22..в( первое_свойство, 4); // ключевая авто-процэдура доступа "в"
    эк22..в( эк22##первое_свойство, 4); //замечяние от авто-пома - не подготовили в разметке.
    // Если у нас есть глобалка с именем "первое_свойство", то всё-равно мы здесь
    // подразумеваем только свойство механизма-типажа "Нечьто2".

    эн = эк22..из( эк22##бума.бум); // "из" авто-процэдура извлечения из деталей механизмов.
    эн = эк22..из( бума.бум); // здешний аргумент можэт быть стрингом с названием свойства.
    //эн = эк22..из( @ бума.бум); // возможно, такой вариант будет что-то означять.
    эн = эк22..бума.бум;

    При этом, нутро-свойства (приватные) нельзя по номеру детали "проводить".
    мех2..в.броня( 5); //внести // ключевая приставка "в" и авто-синтез с названием.
    эн = мех2..из.броня(); //читать //считывание приватного "броня".

    мех матрёш
    {
    //матрёш название_свойства; ОШЫБКА - механизм не можэт включять в разметку сам себя.
    Нечьто2 сложное.свойство; // другой механизм здесь как "наша деталь".
    чи31 простое.свойство;
    }
    матрёш !! маш1;
    маш1..сложное.свойство..самокат = 9;
    маш1..простое.свойство = 12;

    // финиш кусок 15
     




































































































































































































  • 200 лучших книг по версии BBC

  • ВОЛГА / VOLGA, “Дом” 3.02.06