Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: hrytsea on March 05, 2022, 06:06:58 PM

Title: define и setvar
Post by: hrytsea on March 05, 2022, 06:06:58 PM
Привет опять!

Является ли данная строка кода:
Code: (clickermann) [Select]
$x = 5эквивалентной этому:
Code: (clickermann) [Select]
define($x)
setvar($x, 5)

Для перестраховки лучше использовать второй вариант или первый ничем не хуже?
Спасибо.
Title: Re: define и setvar
Post by: Иван_Васильевич on March 06, 2022, 12:59:51 PM
даже инт ересно ст ало от чего, Вы желает е
 перест раховат ься т аким извращённым способом?
Title: Re: define и setvar
Post by: hrytsea on March 07, 2022, 03:13:28 AM
даже инт ересно ст ало от чего, Вы желает е
 перест раховат ься т аким извращённым способом?


от каких-либо неявных багов, очевидно же
Title: Re: define и setvar
Post by: Иван_Васильевич on March 07, 2022, 03:02:25 PM
Стало ещё более интересно!
Краткий список неявных багов, приведите, ну пожалуйста, пожалуйста! ::)
Title: Re: define и setvar
Post by: Oblie1968 on March 13, 2022, 03:16:33 AM
Привет опять!

Является ли данная строка кода:
Code: (clickermann) [Select]
$x = 5эквивалентной этому:
Code: (clickermann) [Select]
define($x)
setvar($x, 5)

Для перестраховки лучше использовать второй вариант или первый ничем не хуже?
Спасибо.
Синтаксис первого перестраховочного оператора:
DEFINE ($var, [value] )
Так что заносите значение сразу в переменную, раз уж хочется пользоваться DEFINE.

А функция SETVAR предназначена для совсем другого, ваша строка setvar($x, 5) скорее всего, выдаст ошибку. Правильно будет setvar("$x", 5). Только вы так не перестрахуетесь, а наоборот, получите, как мне кажется, дополнительные риски поймать какой-нибудь баг.
Title: Re: define и setvar
Post by: hrytsea on March 22, 2022, 12:47:44 AM
Привет опять!

Является ли данная строка кода:
Code: (clickermann) [Select]
$x = 5эквивалентной этому:
Code: (clickermann) [Select]
define($x)
setvar($x, 5)

Для перестраховки лучше использовать второй вариант или первый ничем не хуже?
Спасибо.
Синтаксис первого перестраховочного оператора:
DEFINE ($var, [value] )
Так что заносите значение сразу в переменную, раз уж хочется пользоваться DEFINE.

(https://ibb.co/ftkFVFc)
в случае существования переменной не сработает.

А функция SETVAR предназначена для совсем другого, ваша строка setvar($x, 5) скорее всего, выдаст ошибку. Правильно будет setvar("$x", 5). Только вы так не перестрахуетесь, а наоборот, получите, как мне кажется, дополнительные риски поймать какой-нибудь баг.
Точно, у меня было с ошибкой.
Убедили, буду пользоваться проверенным "="  :)
Title: Re: define и setvar
Post by: dramster on March 22, 2022, 01:10:54 AM
 Из справки про define: Инструкция сработает только если переменная не была объявлена раньше. В противном случае инструкция игнорируется. Если параметр value опущен, переменная инициализируется нулем.
 Вообще define нужен только в некоторых случаях, когда нужно присвоить значение переменной единожды, а далее она меняется в процессе работы скрипта.
Title: Re: define и setvar
Post by: hrytsea on March 24, 2022, 09:52:38 PM
Из справки про define: Инструкция сработает только если переменная не была объявлена раньше. В противном случае инструкция игнорируется. Если параметр value опущен, переменная инициализируется нулем.
 Вообще define нужен только в некоторых случаях, когда нужно присвоить значение переменной единожды, а далее она меняется в процессе работы скрипта.

Я для того эту тему создал чтоб понять, насколько в кликермане работает динамическая типизация и объявление переменных. Заметил несколько особенностей:
- аргументы подпрограмм уничтожаются после выполнения подпрограммы (даже глобальные переменные с такими же именами уничтожаются и обнуляются, обойти можно если использовать уникальные имена аргументов для каждой подпрограммы)
- переменные, передаваемые в подпрограммы в качестве аргументов, остаются при этом в порядке (если не имели такого же имени, как и аргумент подпрограммы)
- нет никакой разницы между $x = 5 и define($x), setvar("$x",5)
- а так же, прикольчики типа:
Code: (clickermann) [Select]
sub(one)
    $x = 5
    $y = 1
end_sub

sub(two)
    $x = 10
    $y = "привет"
end_sub

logclear()
logshow(1)
print($x, " ", $y*3) // 0 0
one()
print($x, " ", $y*3) // 5 3
two()
strseparate($y, "и",$res)
print($x, " ", $res[0]) // 10 пр
halt()

Mission accomplished  8)
Title: Re: define и setvar
Post by: Vint on March 25, 2022, 01:06:28 PM
- а так же, прикольчики типа:
А в чём прикольчик? Вроде бы работает так, как написано.
Title: Re: define и setvar
Post by: hrytsea on March 25, 2022, 07:57:39 PM
- а так же, прикольчики типа:
А в чём прикольчик? Вроде бы работает так, как написано.

я джавист, мне такое странно)
Title: Re: define и setvar
Post by: Vint on March 28, 2022, 11:01:28 AM
Обычная динамическая типизация, как во всех подобных языках.