Author Topic: define и setvar  (Read 4177 times)

0 Members and 1 Guest are viewing this topic.

hrytsea

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
define и setvar
« on: March 05, 2022, 06:06:58 PM »
Привет опять!

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

Для перестраховки лучше использовать второй вариант или первый ничем не хуже?
Спасибо.


Шамбамбукли вздохнул и опустил небо пониже.

Иван_Васильевич

  • Освоившийся
  • **
  • Posts: 72
    • View Profile
Re: define и setvar
« Reply #1 on: March 06, 2022, 12:59:51 PM »
даже инт ересно ст ало от чего, Вы желает е
 перест раховат ься т аким извращённым способом?
« Last Edit: March 06, 2022, 01:02:53 PM by Иван_Васильевич »

hrytsea

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: define и setvar
« Reply #2 on: March 07, 2022, 03:13:28 AM »
даже инт ересно ст ало от чего, Вы желает е
 перест раховат ься т аким извращённым способом?


от каких-либо неявных багов, очевидно же


Шамбамбукли вздохнул и опустил небо пониже.

Иван_Васильевич

  • Освоившийся
  • **
  • Posts: 72
    • View Profile
Re: define и setvar
« Reply #3 on: March 07, 2022, 03:02:25 PM »
Стало ещё более интересно!
Краткий список неявных багов, приведите, ну пожалуйста, пожалуйста! ::)

Oblie1968

  • Освоившийся
  • **
  • Posts: 29
    • View Profile
Re: define и setvar
« Reply #4 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). Только вы так не перестрахуетесь, а наоборот, получите, как мне кажется, дополнительные риски поймать какой-нибудь баг.

hrytsea

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: define и setvar
« Reply #5 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.


в случае существования переменной не сработает.

А функция SETVAR предназначена для совсем другого, ваша строка setvar($x, 5) скорее всего, выдаст ошибку. Правильно будет setvar("$x", 5). Только вы так не перестрахуетесь, а наоборот, получите, как мне кажется, дополнительные риски поймать какой-нибудь баг.
Точно, у меня было с ошибкой.
Убедили, буду пользоваться проверенным "="  :)
« Last Edit: March 22, 2022, 12:49:22 AM by hrytsea »


Шамбамбукли вздохнул и опустил небо пониже.

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: define и setvar
« Reply #6 on: March 22, 2022, 01:10:54 AM »
 Из справки про define: Инструкция сработает только если переменная не была объявлена раньше. В противном случае инструкция игнорируется. Если параметр value опущен, переменная инициализируется нулем.
 Вообще define нужен только в некоторых случаях, когда нужно присвоить значение переменной единожды, а далее она меняется в процессе работы скрипта.

hrytsea

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: define и setvar
« Reply #7 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)


Шамбамбукли вздохнул и опустил небо пониже.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: define и setvar
« Reply #8 on: March 25, 2022, 01:06:28 PM »
- а так же, прикольчики типа:
А в чём прикольчик? Вроде бы работает так, как написано.


hrytsea

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: define и setvar
« Reply #9 on: March 25, 2022, 07:57:39 PM »
- а так же, прикольчики типа:
А в чём прикольчик? Вроде бы работает так, как написано.

я джавист, мне такое странно)


Шамбамбукли вздохнул и опустил небо пониже.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: define и setvar
« Reply #10 on: March 28, 2022, 11:01:28 AM »
Обычная динамическая типизация, как во всех подобных языках.