ONLang/doc/main.md

3.6 KiB

Cli

on file.onla to run file.onla on file.onla --compress -o compressed.conla to compress file.onla to messagePack format on file.onla --convert json -o file.json to compress file.onla to json (supported formats: json, json5, yaml)

How to

All posibilities in example.json5

How to print

[
  "Just string in array", //equally println: "Just string in array"
  ["array", "of", "strings"], // equally println: ["in Function"]
  {
    print: ["in Function"],
  },
  {
    println: ["in Function"],
  },
]

How to calclulate values

works only with numbers (and variables with number type)

[
  { calc: [2, "*", 3] }, //only 3 arguments
  { calc: [{ var: "some_variable" }, "-", 2] }, //{var:"some_var"} this is a way to get a variable
]

Supported operators

  1. +
  2. -
  3. *
  4. /
  5. %
  6. >>
  7. <<
  8. ^
  9. &
  10. |

How to compare values

[
  { comp: [true, "!=", false] }, //only 3 arguments
  {
    comp: [
      {
        comp: [
          { comp: [{ calc: [1, "+", 1] }, ">", 3] },
          "==",
          { var: "var_with_bool_value" },
        ],
      },
      "&&",
      { comp: [{ comp: [{ calc: [1, "+", 1] }, ">", 3] }, "==", true] },
    ],
  }, //more complex comparisons: (( 1 + 1 > 3 ) == var_with_bool_value) && (( 1 + 1 > 3 ) == true)
]

Supported operators for compare

  1. ==
  2. !=
  3. >
  4. <
  5. >=
  6. <=
  7. &&
  8. ||

How to create a variable

[
  {
    let: {
      str: "A",
      num: 2,
      arr: ["Array", "in", "variable"],
    },
  },

  {
    let: {
      calculated: { calc: [{ var: "num" }, "*", 4] }, //result 8
    },
  },

  {
    let: {
      referenceVar: { ref: "calculated" },
    },
    //creates a reference variable, when the "calculated"
    // is changed, "referenceVar" will also be changed, in the
    // future it will be possible to change "referenceVar"
    // and the "calculated" will be changed
  },

  {
    let: {
      array: { arr: [{ var: "num" }, 4] }, //create calculated array result [2, 4]
    },
  },

  {
    let: {
      objVar: { obj: { var: "num" } }, //create object (hashmap) variable result {var: "num"}
    },
  },

  {
    let: {
      wrongObjVar: { var: "num" }, //result 2
    },
  },
]

How to assign variable

[
  {
    assign: {
      calculated: { calc: [{ var: "calculated" }, "+", 1] }, // calculated = calculated + 1
    },
  },
]

Loops

[
  {
    loop: [
      {
        if: {
          condition: { comp: [{ var: "i" }, ">=", 10] }, //if i >= 10 break loop
          body: ["break"],
          //else: [..commands] also work
        },
      },
      { assign: { i: { calc: [{ var: "i" }, "+", 1] } } }, // i += 1
      { print: ["\ri = ", { var: "i" }] },
      { sleep: 500 }, //sleep 500 ms
    ],
  },
]

Input from console

[
  {
    let: {
      name: { input: "Your name: " },
    },
  },
  { print: ["Bye, ", { var: "name" }, "!"] },
]

Delete variable

[
  {
    let: {
      name: { input: "Your name: " },
    },
  },
  { print: ["Bye, ", { var: "name" }, "!"] },
  { delete: "name" }, //deletes variable from memory
]

Create scope

[
  {scope:[..commands]}
]

Create functions

[
  "Creating function `sum`",
  {
    fn: {
      name: "sum",
      args: ["first", "second"],
      body: [
        {
          return: {
            calc: [{ var: "sum.first" }, "+", { var: "sum.second" }],
          },
        },
      ],
    },
  },

  "fn sum(first, second){ return first+second};",
  "Run function `sum`",

  ["sum(2, 2) = ", { sum: [2, 2] }],
]