Function vs Method on Types.

BlitzMax Forums/BlitzMax Beginners Area/Function vs Method on Types.

Yue(Posted 2015) [#1]
Several concerns.

In many instances I see inside custom types are created functions like methods, can understand this as well ?, I see you can use the keyword global for the variables.

 Type Car
  
   Global imageCar:TImage
   Field colorCar:String = "White"


   Function Run....

   Method Gas...

 End Type



Yue(Posted 2015) [#2]
My question is because in helping BlitzMax, for example in the class (type) Tlist, I see that there are functions and methods, this has me a little confused.

MyList.Clear() ' Method.
ClearList(ListaCar:TList) ' Function.



Azathoth(Posted 2015) [#3]
Functions in types are like static methods in C++, they don't have the implicit instance parameter (self in BlitzMax, this in C++). This means they can be called without constructing an instance first, however this also means they usually have no access to instance members.


Henri(Posted 2015) [#4]
Hi,

if you look inside ClearList function you'll see...
Function ClearList( list:TList )
	list.Clear
End Function
...that it's using TList's Clear method inside.


Functions are like globals in a sense that they exist in a static memory space and are created only once when you start your program,
no mather how many objects are created with New operator.

Methods and fields only exist when a new object is created and they are tide to that specific object instance,
and are accessed through that objects reference created with New.


-Henri


Derron(Posted 2015) [#5]
Type TCar
	Field color:string
	
	Method Run()
		print "run run run"
	End Method


	Function ConstructCar:TCar(color:string)
		local c:TCar = new TCar
		c.color = color
		return c
	End Function
End Type


'not possible
'TCar.Run()

'possible
TCar.ConstructCar("red").Run()

'most useful approach
local myCar:TCar = TCar.ConstructCar("red")

'now our car is a red one, ready to run
myCar.Run()


Short:
- functions are "generic" and can be called from outside the type
- methods need an instance of the type to get called but have access to its properties (print myCar.color)


bye
Ron