Недокументированные возможности ММВ
|
|
as-master | Дата: Суббота, 04 Августа 2007, 06:38 | Сообщение # 1 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Quote (Rush) Кстати, обращаю внимание всех на конструкцию вида: Code n=(INT(i/5)=i/5) Это то же самое, что i Mod 5 = 0. Вот это да!!! А что за параметр Mod такой? Это что за функция? В справке такой не встречал...
Да пребудет с вами ММВ!
|
|
| |
Rush | Дата: Суббота, 04 Августа 2007, 13:46 | Сообщение # 2 |
Обозреватель-консультант
Группа: Проверенные
Сообщений: 216
Репутация: 10
Награды: 1
Статус: Offline
| Quote (as-master) А что за параметр Mod такой? Это арифметический оператор вычисления остатка от деления. В калькуляторе виндовом есть такой, кстати. Используется для деления двух чисел и получение остатка от их деления Например, n= 16 Mod 5. n будет равен 1, то есть остаток от деления. Но в ММВ он не предусмотрен. А бывает очень удобен. Ну вот как в моем примере. Без остатка будет делиться только кратно числу Y в примере X Mod Y. Вот я и придумал заменитель. Но, как я написал это только аналог X Mod Y=0. А полный аналог выглядит так:
Сообщение отредактировал Rush - Суббота, 04 Августа 2007, 14:02 |
|
| |
as-master | Дата: Суббота, 04 Августа 2007, 14:02 | Сообщение # 3 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Это классно, но я всё равно не понял конструкцию строки: n=(INT(i/5)=i/5) Некое число n равно целой части от деления числа i на 5, и дальше снова знак равенства. Два знака равенства в одной строке? Вот этого я не понимаю...
Да пребудет с вами ММВ!
|
|
| |
Rush | Дата: Суббота, 04 Августа 2007, 14:10 | Сообщение # 4 |
Обозреватель-консультант
Группа: Проверенные
Сообщений: 216
Репутация: 10
Награды: 1
Статус: Offline
| Quote (as-master) Два знака равенства в одной строке? Вот этого я не понимаю... А меня не смущает. В скобках в правой части просто операция сравнения. И в зависимости от того, совпадают условия или нет, в левой части изменяется булево значение - True или False. Я в ходе экспериментов на ММВ нашел эту недокументированную фичу и вовсю пользуюсь. А конструкция n=n<>TRUE, которую я давно уже придумал, есть аналог логического оператора Not (n=Not n). Надо Debug чаще использовать...
Сообщение отредактировал Rush - Суббота, 04 Августа 2007, 14:16 |
|
| |
as-master | Дата: Суббота, 04 Августа 2007, 14:19 | Сообщение # 5 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Quote (Rush) А конструкция n=n<>TRUE А сия конструкция как работает? И каким образом отладчик тут может помочь? PS. Потом вынесем это обсуждение в отдельную тему, типа "Недокументированные функции ММВ". А может быть, даже статью на эту тему напишешь?
Да пребудет с вами ММВ!
|
|
| |
Rush | Дата: Суббота, 04 Августа 2007, 14:46 | Сообщение # 6 |
Обозреватель-консультант
Группа: Проверенные
Сообщений: 216
Репутация: 10
Награды: 1
Статус: Offline
| Quote (as-master) А сия конструкция как работает? И каким образом отладчик тут может помочь? Работает просто - если N в правой части не равно TRUE, значит условие неравенства выполнено и N в левой части автоматом становится TRUE. При следующем сравнении N в правой части уже бедет равно TRUE и условие неравенства не выполняется, это приводит к тому, что N в левой части становится FALSE. И так по кругу... А отладчик помогает тем, что там видны все значения переменных и ты можешь проследить пошагово, как выполнялись скрипты. Добавлено (04 Августа 2007, 14:46) ---------------------------------------------
Quote (as-master) А может быть, даже статью на эту тему напишешь? Чукча не писатель... Не могу заставить себя сделать что-то организованно.
|
|
| |
as-master | Дата: Суббота, 04 Августа 2007, 15:10 | Сообщение # 7 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Действительно, очень удобно для случаев: ** На "первый второй" рассчитайсь! n=n<>TRUE If (n) Then Message("Первый!","") Else Message("Второй!","") End Обычно в этих случаях мне приходилось писать несколько длиннее: ** На "первый второй" рассчитайсь! If (n=FALSE) Then n=TRUE Message("Первый!","") Else n=FALSE Message("Второй!","") End Правда, выигрыш совсем небольшой, но всё же конструкция интересна. А где еще ее можно использовать? Quote (Rush) А отладчик помогает тем, что там видны все значения переменных Интересно, каким же образом отладчик может помочь выявить недокументированные функции программы? Quote (Rush) Чукча не писатель... smile Не могу заставить себя сделать что-то организованно. Не можешь - научим... но это не про тебя, а вот не хочешь - заставим - это как раз тот случай Давай-ка, брат. Кроме тебя никто не сделает. А народ за полезную статью спасибо скажет.
Да пребудет с вами ММВ!
|
|
| |
Rush | Дата: Суббота, 04 Августа 2007, 17:10 | Сообщение # 8 |
Обозреватель-консультант
Группа: Проверенные
Сообщений: 216
Репутация: 10
Награды: 1
Статус: Offline
| Quote (as-master) А где еще ее можно использовать? Ну делал я ее специально для чекбоксов. В старой версии форума я писал о применении - включить/выключить. n=n<>TRUE Invert("Galka") А хочешь еще интересный пример? Таким образом можно сразу нескольким переменным присваивать одно значение - крайней справа переменной...
|
|
| |
as-master | Дата: Суббота, 04 Августа 2007, 21:37 | Сообщение # 9 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Класс! Всё это очень любопытно! Давай, давай, делай статью. Небольшую хотя бы. Ты только набросай суть, а "литературно-художественную" обработку мы сделаем сами :) Ну так как?
Да пребудет с вами ММВ!
|
|
| |
Rush | Дата: Воскресенье, 05 Августа 2007, 01:49 | Сообщение # 10 |
Обозреватель-консультант
Группа: Проверенные
Сообщений: 216
Репутация: 10
Награды: 1
Статус: Offline
| Quote (as-master) Давай, давай, делай статью. Небольшую хотя бы. Да я понятия не имею, что про это можно написать...
|
|
| |
as-master | Дата: Воскресенье, 05 Августа 2007, 08:46 | Сообщение # 11 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Недокументированные возможности ММВ ИЛИ несколько необычных конструкций в написании скриптов Автор: Rush (почетный член клуба ММВ) Ни для кого не секрет, что написание сценариев в ММВ - большое искусство. И чем больше владеет этим искусством автор проекта, тем короче, изящнее и оригинальнее скрипты в его проекте. В своей практике работы с ММВ я постоянно стремлюсь к оптимизации скриптов, что дает возможность не просто сделать короче сами тексты сценариев, но и значительно ускоряет и "облегчает" работу всего проекта в целом. В данной небольшой статье я хочу поделиться некоторыми из своих приемов или даже хитростей при написании скриптов. Многие из них были найдены мной чисто эмпирически и на первый взгляд могут показаться вам даже парадоксальными (но не удивляйтесь - всё это гарантированно работает), другие же строки сценариев родились в результате длительной работы по достижению максимальной оптимизации кода для тех или иных стандартных приемов. Итак. начнем. Известно ли вам, что... (ну, и так далее) Вот так пишут мастера-демагоги, лучше всего в таких текстах преуспели буржуи - в их статьях и книгах обычно бывает больше всего воды Но у тебя воды не будет, кроме вступления. А нужно-то всего пару страничек текста, ведь тебе есть - ох как есть - чем поделиться с народом...
Да пребудет с вами ММВ!
|
|
| |