12.9 Methods

It is also possible to use Hollywood for object-oriented programming. Hollywood does not have the concept of class but you can easily emulate the behaviour using tables and metatables. One thing that is important for object-oriented programming is that object functions usually receive a handle to themselve as the first parameter. This parameter is usually called self or this. Of course, you can emulate this behaviour by simply declaring a self or this parameter in your function and passing to it the object whenever you call the function, but you can also use a special syntax for object-oriented programming that Hollywood offers.

If you declare your functions using the colon operator Hollywood will automatically initialize a hidden self parameter for you. You do not have to declare it explicitly. If you use the colon syntax, it is always there. Functions that are declared using the colon syntax are called methods because they are dependent on a root object.

Here is a simple example of a methods in Hollywood:

 
cart = {items = {}, numitems = 0}

Function cart:AddItem(n$, p)
    self.items[self.numitems] = {name = n$, price = p}
    self.numitems = self.numitems + 1
EndFunction

Function cart:RemoveItem(n$)
    For Local k = 0 To self.numitems - 1
       If self.items[k].name = n$
         RemoveItem(self.items, k)
         self.numitems = self.numitems - 1
         Return
       EndIf
    Next
EndFunction

Function cart:CheckOut()
    Local total = 0

    For Local k = 0 To self.numitems - 1
       NPrint(self.items[k].name, self.items[k].price)
       total = total + self.items[k].price
    Next

    NPrint("Your total is", total)
EndFunction

cart:AddItem("DVD", 10)
cart:AddItem("Blizzard PPC", 1000)
cart:AddItem("AAA Chipset", 100000)
cart:AddItem("68070", 500)
cart:CheckOut()
cart:RemoveItem("Blizzard PPC")
cart:CheckOut()

The code above creates a simple class that represents a cart. The class has three methods: Add item, remove item, and check out. Furthermore, it has two properties: A table containing a list of all elements in the cart, and a count value that contains how many elements are currently in the cart. You can see that each of the three methods works with a self variable which has not been declared. This is because all methods have been declared using the colon operator and thus Hollywood will always pass a the self parameter to them automatically.

Of course there is more much more to object-oriented programming than covered in this brief excursion. Going into the depths of OOP (inheritance, multiple inheritance, privacy, etc.) would be too much for this guide, but it is all possible with Hollywood tables and metatables. If you are interested in learning more about this topic, you should consult a book about the Lua programming language because Hollywood uses a Lua kernel. For example, the book "Programming in Lua (second edition)" by Roberto Ierusalimschy has an extensive chapter about OOP in Lua, which you usually can adapt straight into Hollywood code.


Show TOC