ВНИМАНИЕ! Представленный документ может без изменения и как есть запускаться в качестве сценария, что не вызовет генерацию какой-либо ошибки какого-либо рода в исполняемой среде. Так, читаемый в настоящий момент текст относится к классу комментариев и игнорируется парсером. Причём никакой специальной пометки текст не имеет и интерпретируется за комментарий примерно по тем же принципам, что и при субъективном зрительном анализе, когда секции с вычислениями и формулами с первого взгляда легко выделяются и отделяются от общего документального текста субъективного содержания. Это является одной из основных особенностей языка, в общем плане улучщающей читабильность листингов плюс с борьбой с избыточностью. DrawLine( Здесь описывается определение функции, причём скобкой отделяется имя x1 0.0 не только от аргументов, но и служит началом строки комментариев. На y1 0.0 остальных строчках описываются, собственно, аргументы используемые в x2 0.0 качестве источников вводных данных. А так же их тип со значениями по y2 0.0 умолчанию. ): Когда все аргументы описаны заключением в скобки, двоеточие начинает .lastX ?? описывать свойства функции и её состояние с прошлого момента вызова, .lastY ?? которые должны объявляться как неопределённые при описании функции. (#x2 y2#) Если x2/y2 умещается в числовом значении и являются числами, dx = x2 - x1 вычисляем длину отрезка по осям x и y, объявляя dy = y2 - y1 попутно ещё несколько локальных переменных (|dx| > |dy|) Вычисляя модули определяем наибольшее значение в ........len = |dx| качестве абсолютной длины отрезка из dx/dy. ........len = |dy| Пунктированием завершаем блок ИСТИНА и ЛОЖЬ dx / len Теперь делим переменные dx и dy для получения нужных dy / len коэффициентов интерполирования вектора на растровой lastX = x1 + 0.5 матрице. Попутно иницируем значения основного ........lastY = y1 + 0.5 цикла вывода группы пикслей в ряд одной линии (len--) Заметим, что постфиксный декремент - двойной минус и слитно DrawPixel(lastX, lastY) lastX + dx, lastY + dy Допускается и такая запись. ........true Из представленного примера значительная часть записей имеет очевидный смысл. В других случаях следует подчеркнуть и разобрать наиболее вазные элементы языка: (какое-либо условие) Блок операций, выполняемый, пока условие истино Допускается произвольное число строк, конструктивных вхождений ________Подчёркивание отделяет блок цикла от блока, который должен был выполниться, если цикл вообще не совершался. Однако, в данном блоке допускается совершить любые действие и попытаться цикл запустить вновь. Но только одной попыткой! ........Если цикл перезапускать не следует, блок завершается пунктиром Тем самым, описанная конструкция работает как сложный комплекс сочетаний таких стандартных операций, как do-while и if-else. Ниже описанно устройство данной конструкции: (condition--) any_function(value) value + condition представляется как: while(condition --) { any_function(value) value += condition } Пример 2: (condition--) any_function(value) ........value + condition представляется как: while(condition --) { any_function(value) value += condition break } оптимизируется в: if(condition --) { any_function(value) value += condition } Пример 3: (condition--) any_function(value) ________value + condition -condition ........value = 0 представляется как: if(!condition) { condition -- condition = -condition value = 0 } else { while(condition --) { any_function(value) value += condition } } Пример 4: (condition--) any_function(value) ________value + condition -condition value = 0 представляется как: if(!condition) { condition -- condition = -condition value = 0 } while(condition --) { any_function(value) value += condition } Пример 5: any_function(value) ________value + condition (condition --) представляется как:4 do { any_function(value) value += condition } while(condition --) Пример 6: (condition--) ========0 value = 0 ........any_function(value) ========1 value = 1 ........any_function(value) ========2 4..6 value = 2 any_function(value) ========3 value = 3 any_function(value) ======== value = -1 представляется как: switch(condition --) { case 0: value = 0 any_function(value) break case 1: value = 1 any_function(value) break case 2: case 4: case 5: case 6: value = 2 any_function(value) case 3: value = 3 any_function(value) default: value = -1 } Остальные комбинации запрещены и останавливают работу парсера. Несколько сложных конструкций: Блок первого уровня Блок второго уровня Блок третьего уровня ^-----continue до первого уровня ^---continue до второго уровня v-----break по первый уровень v---break по второй уровень ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ toBase64( header ): b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" enc = "" i = 0 o1 = this.charCodeAt(i++) o2 = this.charCodeAt(i++) o3 = this.charCodeAt(i++) bits = o1 << 16 | o2 << 8 | o3 h1 = bits >> 18 & 0x3F h2 = bits >> 12 & 0x3F h3 = bits >> 6 & 0x3F h4 = bits & 0x3F enc + b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4) (i < this.length) (this.length % 3) ====1 ....enc = enc.slice(0, -2) + "==" ====2 ....enc = enc.slice(0, -1) + "=" ....header + ";base64," + enc ~~ ~~ ~~ ~~ toBase64( header ): b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" enc = "" i = 0 o1 = this.charCodeAt(i++) o2 = this.charCodeAt(i++) o3 = this.charCodeAt(i++) bits = o1 << 16 | o2 << 8 | o3 h1 = bits >> 18 & 0x3F h2 = bits >> 12 & 0x3F h3 = bits >> 6 & 0x3F h4 = bits & 0x3F enc + b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4) (i < this.length) %(this.length % 3) %1 == 1 ..enc = enc.slice(0, -2) + "==" %1 == 2 ..enc = enc.slice(0, -1) + "=" ..header + ";base64," + enc
Тема в архиве.