Форум
Написать нам
  • Страница 1 из 1
  • 1
Модератор форума: as-master  
Недокументированные возможности ММВ
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 такой?

Это арифметический оператор вычисления остатка от деления. В калькуляторе виндовом есть такой, кстати. smile
Используется для деления двух чисел и получение остатка от их деления
Например, n= 16 Mod 5. n будет равен 1, то есть остаток от деления.

Но в ММВ он не предусмотрен. А бывает очень удобен. Ну вот как в моем примере. Без остатка будет делиться только кратно числу Y в примере X Mod Y.
Вот я и придумал заменитель. Но, как я написал это только аналог X Mod Y=0.
А полный аналог выглядит так:

Code
N=X-INT(X/Y)*Y


Сообщение отредактировал 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)
Два знака равенства в одной строке? Вот этого я не понимаю...

А меня не смущает. smile В скобках в правой части просто операция сравнения. И в зависимости от того, совпадают условия или нет, в левой части изменяется булево значение - True или False.
Я в ходе экспериментов на ММВ нашел эту недокументированную фичу и вовсю пользуюсь.
А конструкция n=n<>TRUE, которую я давно уже придумал, есть аналог логического оператора Not (n=Not n).

Надо Debug чаще использовать... smile

Сообщение отредактировал 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. И так по кругу... smile

А отладчик помогает тем, что там видны все значения переменных и ты можешь проследить пошагово, как выполнялись скрипты.

Добавлено (04 Августа 2007, 14:46)
---------------------------------------------

Quote (as-master)
А может быть, даже статью на эту тему напишешь?

Чукча не писатель... smile Не могу заставить себя сделать что-то организованно.
 
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 Не могу заставить себя сделать что-то организованно.

Не можешь - научим... но это не про тебя, а вот
не хочешь - заставим - это как раз тот случай smile
Давай-ка, брат. Кроме тебя никто не сделает.
А народ за полезную статью спасибо скажет.


Да пребудет с вами ММВ!
 
RushДата: Суббота, 04 Августа 2007, 17:10 | Сообщение # 8
Обозреватель-консультант
Группа: Проверенные
Сообщений: 216
Репутация: 10
Награды: 1
Статус: Offline
Quote (as-master)
А где еще ее можно использовать?

Ну делал я ее специально для чекбоксов. В старой версии форума я писал о применении - включить/выключить.
n=n<>TRUE
Invert("Galka")

А хочешь еще интересный пример? smile

Code
x=a=b=c=d

Таким образом можно сразу нескольким переменным присваивать одно значение - крайней справа переменной...
 
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 (почетный член клуба ММВ)

Ни для кого не секрет, что написание сценариев в ММВ - большое искусство.
И чем больше владеет этим искусством автор проекта, тем короче, изящнее
и оригинальнее скрипты в его проекте.

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

Итак. начнем. Известно ли вам, что... (ну, и так далее)

Вот так пишут мастера-демагоги, лучше всего в таких текстах преуспели
буржуи - в их статьях и книгах обычно бывает больше всего воды smile
Но у тебя воды не будет, кроме вступления. А нужно-то всего пару страничек
текста, ведь тебе есть - ох как есть - чем поделиться с народом...


Да пребудет с вами ММВ!
 
  • Страница 1 из 1
  • 1
Поиск: