Interfaces

Monkey Forums/Monkey Programming/Interfaces

zoqfotpik(Posted 2012) [#1]
Looking over the Monkey docs, I see that it supports use of interfaces.

I understand, basically, what they are. But what are some interesting and handy uses for them?


slenkar(Posted 2012) [#2]
when the extends system isnt flexible enough,
I have only one interface in my game cos I wanted villages and people to take turns so i made an interface called 'turn_taker'
I couldnt get village and person to extend turn_taker easily.

village extended world_map_object
and person extended iso_map_object so it would have been diffiuclt to make them both extend turn_taker.

A tree is also a world_map_object and I didnt want a tree to take a turn


Some programmers dont use extends at all and only use interfaces, this is silly because for example a GUI system would repeat a lot of code if it was programmed only with interfaces


Shinkiro1(Posted 2012) [#3]
One example is callbacks:

Say you want to want to know when some object has finished it's action.

Interface EventHandler
	Method OnEvent:Void (id:String)
End


Class Action
	
	Field counter:Int
	Field listener:EventHandler

	Method Update:Void()
		counter += 1
		If counter > 99
			Stop()
		End
	End
	
	Method Stop:Void()
		If listener
			listener.OnEvent ("Counter Finished")
		End
	End
	
End


Class Game Implements EventHandler
	
	Field Actions:List<Action> = New List<Action>

	Method Update:Void()
		For Local a:Action = Eachin Actions
			a.Update()
		End
	End
	
	Method OnEvent:Void (id:String)
		Select id
			Case "Counter Finished"
				'Now do something
			Default
		End
	End

End


The game listens when an action has finished and when one does, the action notifies the game through the OnEvent Method.

Example:
Local game:Game = New Game
Local action:Action = New action
game.Actions.AddLast (action)

action.listener = Game



zoqfotpik(Posted 2012) [#4]
Is that the replacement for function pointers? Are there no function pointers in Monkey?


slenkar(Posted 2012) [#5]
correct


Samah(Posted 2012) [#6]
@zoqfotpik: Is that the replacement for function pointers? Are there no function pointers in Monkey?

It's a way of (as Mark would put it) "kludging" function pointers, but that's not the sole purpose of interfaces.


Gerry Quinn(Posted 2012) [#7]
They are a limited form of multiple inheritance that is harder to go wrong with. Like in slenkar's example.