суббота, 28 декабря 2019 г.

Переменные, константы, вызов функций

    Переменная - изменяемые данные имеющее имя.
    Константа - неизменяемые данные имеющее имя.
    Чтобы объявить в коде функции переменную или константу, нужно написать имя переменной или константы, затем ":=" для переменной, ".=" для константы, а затем выражение возвращающее значение, это значение и содержит в себе данные которым будут являться переменной или константой.
    Имя переменной или константы должно соответствовать следующим правилам:
  • начинается со строчной буквы
  • содержит только буквы латинского алфавита, цифры и знак подчёркивания (_)
  • не может содержать два знака подчёркивания идущих подряд
  • не может быть одним из следующих имён: "if", "case", "flag", "of", "for", "return", "result", "break", "continue", "mif", "parse", "true", "false"
  • не может начинаться с "builtIn"
     Выражение может содержать следующие элементы:
  • Переменная
  • Константа
  • Вызов функции
  • Тип
  • Имя члена типа
    Если в выражении указан тип, то вместо типа будут данные указанного типа заполненные нулями. Если вы хотите указать таким образом тип на манере того как это делается в правилах функций, поставьте перед типом символ "#".
    При объявлении типов мы указывали члены типа, в выражении мы можем получить данные соответствующих члену типа имея данные указанного типа. Для этого нужно после данных какого либо типа указать "." для получения не изменяемых данных, ":" - для получения изменяемых данных, а затем имя нужного члена типа.
    Для вызова функции необходимо написать имя функции, а затем в круглых скобках указать аргументы передаваемые функции. В качестве аргументов выступают выражения. Так же существует способ вызвать функцию указав в начале первый аргумент, затем "." если аргумент передаётся как не изменяемый или ":" если аргумент передаётся как изменяемый, затем имя функции и в круглых скобках аргументы, но начиная со второго. Нельзя передавать в функцию в качестве аргумента переменную или её членов типа, если хотя-бы один из этих аргументов является изменяемым.
    В коде функции можно меня значения изменяемых данных, для  этого нужно указать выражение возвращающее изменяемые данные котором и будет присвоено новое значение, затем символ "=", после чего выражении возвращающее данные которые и будут присвоены. Изменяемые значения могут содержать только выражения содержащие переменные и члены типа получающие значения из другого выражения возвращающего изменяемые данные.
     Имейте в виду, если присвоить значение одних данных другим данным, при последующем изменении любых данных, это не повлияет на другие данные.
     Не возможно получить изменяемые данные из не изменяемых.
     При создании функции возвращающей значение, автоматически создаётся переменная result заполненная нулями и имеющая тип указанный в правилах функции. По окончании работы функции именно значение этой переменной и будет возвращено в качестве результата.
    Если вы хотите вызвать функцию игнорируя возвращаемое значение, присвойте это значение знаку подчеркивания. Для вызова процедуры необходимо просто указать её имя и в круглых скобках передаваемые аргументы.
    Пример бессмысленной функции которая показывает всё выше сказанное:


proc foo(:arg1, :arg2)
    a := [UInt8] //создание переменной типа [UInt8]
                 //значение которой заполнено нулями
    b := a //b имеет значение a
    c .= b //создание константы c имеющей значение b
    b = "Hello" //присвоение нового значения b, на a и c это ни как не повлияло
    a = b //присвоение нового значения a
    a:setFirst('h') //вызов процедуры setFirst с передачей ей аргументов a и 'h'
                    //в a изменено значение на "hello", на b и c это никак не повлияло
    arg1:member1:member1 = arg2.member2 //присвоение члену типа члена типа аргумента функции arg1
                                        //значение члена типа аргумента функции arg2
    _ = arg2:someFunction(a) //вызов функции someFunction с передачей ей в качестве аргумента
                             //аргумент текущей функции. Результат выполнения игнорируется
    _ = someFunction(arg2, a) //тоже самое
    print(a) //вызов процедуры print с передачей ей качестве аргумента переменную a
    _ = print(a) //вызов функции(не процедуры) print с передачей ей качестве аргумента переменную a
                 //результат выполнения игнорируется
    l := #arg1 //создать переменную l с таким же типом как и у аргумента функции arg1
               //но имеющую значение заполненное нулями

Комментариев нет:

Отправить комментарий

Пожалуйста без мата и оскорблений. Если хотите сообщить об ошибках, для этого есть форма обратной связи.