L1VM - objects tutorial
L1VM - objects tutorial
Here I will show how to write objects in Brackets for OOP.
I did add a new object
and objectend
keyword to Brackets.
With this you can declare objects and OOP like named functions.
If the function name begins with an uppercase P
then it is a private function.
I will show an object in my math circle
program:
(circle object)
#var ~ circle
(set double 1 circ~ 0.0)
(set double 1 diam~ 0.0)
(set double 1 radius~ 0.0)
(set double 1 area~ 0.0)
(set string s circstr~ "circumference: ")
(set string s diamstr~ "diameter: ")
(set string s radiusstr~ "radius: ")
(set string s areastr~ "area: ")
(calc_diam->circle func)
The calc_diam->circle
function calculates the diameter of the circle.
At the beginning of the object all needed variables are declared.
Here every object function must end with: ->circle
, as this is the object name.
To call an object function just do a normal function call as with every normal function.
Here is the full example:
// math-circle-oop.l1com
// calculate diameter or circumference of circle
// NEW: OOP style functions and private functions beginning with uppercase P
//
#include <intr.l1h>
#include <math-const.l1h>
#include <misc-macros.l1h>
(main func)
(set int64 1 zero 0)
(set int64 1 one 1)
(set int64 1 two 2)
(set int64 1 three 3)
(set int64 1 four 4)
(set string s menu_diamstr "1: calculate diameter of circle")
(set string s menu_circstr "2: calculate circumference of circle")
(set string s menu_areastr "3: calculate area of circle")
(set string s menu_quitstr "4: quit")
(set string s menu_chstr "? ")
(set int64 1 input 0)
(set int64 1 f 0)
// -------------------------------------------------------
(:loop)
print_s (menu_diamstr)
print_n
print_s (menu_circstr)
print_n
print_s (menu_areastr)
print_n
print_s (menu_quitstr)
print_n
print_s (menu_chstr)
// read input
input_i (input)
pull_int64_var (input)
(switch)
(input one ?)
(:calc_diam->circle !)
(break)
(input two ?)
(:calc_circ->circle !)
(break)
(input three ?)
(:calc_area->circle !)
(break)
(input four ?)
exit (zero)
(break)
(switchend)
print_n
print_n
(:loop jmp)
(funcend)
(circle object)
#var ~ circle
(set double 1 circ~ 0.0)
(set double 1 diam~ 0.0)
(set double 1 radius~ 0.0)
(set double 1 area~ 0.0)
(set string s circstr~ "circumference: ")
(set string s diamstr~ "diameter: ")
(set string s radiusstr~ "radius: ")
(set string s areastr~ "area: ")
(calc_diam->circle func)
#var ~ circle
print_s (circstr~)
// input double circ
input_d (circ~)
{diam~ = (circ~ / m_pimath)}
print_s (diamstr~)
print_d (diam~)
(funcend)
(calc_circ->circle func)
#var ~ circle
print_s (diamstr~)
// input double diam
input_d (diam~)
{circ~ = (diam~ * m_pimath)}
print_s (circstr~)
print_d (circ~)
(funcend)
(calc_area->circle func)
#var ~ circle
print_s (radiusstr~)
// input double radius
input_d (radius~)
{area~ = (m_pimath * radius~ * radius~)}
print_s (areastr~)
print_d (area~)
(funcend)
(objectend)