Continue with the Basics by Example; today's version of the post written in Cobra Enjoy!
You can copy and paste the code below in your favorite IDE/Editor and start playing and learning with it. This little "working" program will teach you the basics of the Programming Language.
There are some "comments" on the code added just to tell you what are or how are some features called. In case you want to review the theory, you can read my previous post, where I give a definition of each of the concepts mentioned on the code. You can find it here: http://carlosqt.blogspot.com/2010/08/new-series-languages-basics-by-example.html
Greetings Program - Verbose
# Cobra Basics use System namespace CobraGreetProgram class Greet is public # Fields or Attributes var __message as String var __name as String var __loopMessage as int #Properties pro message as String is public get return __message set __message = .capitalize(value) pro name as String is public get return __name set __name = .capitalize(value) pro loopMessage as int is public get return __loopMessage set __loopMessage = value # Constructor cue init is public base.init __message = '' __name = '' __loopMessage = 0 # Overloaded Constructor cue init(message as String, name as String, loopMessage as int) is public base.init __message = message __name = name __loopMessage = loopMessage # Method 1 def capitalize(val as String) as String is private # 'if-then-else' statement if val.length >= 1 return val.capitalized else return '' # Method 2 def salute is public # 'for' statement for i in __loopMessage print '[__message] [__name]!' # Overloaded Method 2.1 def salute(message as String, name as String, loopMessage as int) is public # 'while' statement i as int = 0 while i < loopMessage print '[.capitalize(message)] [.capitalize(name)]!' i+=1 # Overloaded Method 2.2 def salute(name as String) is public # 'switch/case' statement is not supported # using branch statement instead dtNow as DateTime = DateTime.now branch dtNow.hour on 6 or 7 or 8 or 9 or 10 or 11, __message = 'good morning,' on 12 or 13 or 14 or 15 or 16 or 17, __message = 'good afternoon,' on 18 or 19 or 20 or 21 or 22, __message = 'good evening,' on 23 or 0 or 1 or 2 or 3 or 4 or 5, __message = 'good night,' else, __message = 'huh?' print '[.capitalize(__message)] [.capitalize(name)]!' # Console Program class Program is public def main is shared # Define object of type Greet and Instantiate. Call Constructor g as Greet = Greet() # Call Set Properties g.message = 'hello' g.name = 'world' g.loopMessage = 5 # Call Method 2 g.salute # Call Overloaded Method 2.1 and Get Properties g.salute(g.message, 'cobra', g.loopMessage) # Call Overloaded Method 2.2 g.salute('carlos') # Stop and Exit print 'Press any key to exit...' Console.readGreetings Program - Minimal
# Cobra Basics class Greet # Fields or Attributes var __message var __name var __loopMessage #Properties pro message as String get return __message set __message = .capitalize(value) pro name as String get return __name set __name = .capitalize(value) pro loopMessage as int get return __loopMessage set __loopMessage = value # Constructor cue init base.init __message = '' __name = '' __loopMessage = 0 # Overloaded Constructor cue init(message as String, name as String, loopMessage as int) base.init __message = message __name = name __loopMessage = loopMessage # Method 1 def capitalize(val as String) as String is private # 'if-then-else' statement if val.length >= 1 return val.capitalized else return '' # Method 2 def salute # 'for' statement for i in __loopMessage print '[__message] [__name]!' # Overloaded Method 2.1 def salute(message as String, name as String, loopMessage as int) # 'while' statement i = 0 while i < loopMessage print '[.capitalize(message)] [.capitalize(name)]!' i+=1 # Overloaded Method 2.2 def salute(name as String) # 'switch/case' statement is not supported # using branch statement instead dtNow = DateTime.now branch dtNow.hour on 6 or 7 or 8 or 9 or 10 or 11, __message = 'good morning,' on 12 or 13 or 14 or 15 or 16 or 17, __message = 'good afternoon,' on 18 or 19 or 20 or 21 or 22, __message = 'good evening,' on 23 or 0 or 1 or 2 or 3 or 4 or 5, __message = 'good night,' else, __message = 'huh?' print '[.capitalize(__message)] [.capitalize(name)]!' # Console Program class Program def main # Define object of type Greet and Instantiate. Call Constructor g = Greet() # Call Set Properties g.message = 'hello' g.name = 'world' g.loopMessage = 5 # Call Method 2 g.salute # Call Overloaded Method 2.1 and Get Properties g.salute(g.message, 'cobra', g.loopMessage) # Call Overloaded Method 2.2 g.salute('carlos') # Stop and Exit print 'Press any key to exit...' Console.read
And the Output is:
Auto-Implemented Properties in Cobra
Auto-implemented properties enable you to quickly specify a property of a class without having to write code to Get and Set the property. The following code shows how to use them just like with VB.NET, C#, C++/CLI and so on.
pro <propname> [ as <type>] [from {var, <backingvariablename>} [= <initvalue>] ]
[<docstring>]
class Greet var __message var __name var __loopMessage #Properties pro message from __message pro name from __name pro loopMessage from __loopMessage # or you can just say from var as here below. it will look for # fields called (_|__)message and (_|__)name and (_|__)loopMessage # pro message from var # pro name from var # pro loopMessage from var #Constructor cue init base.init __message = '' __name = '' __loopMessage = 0 def capitalize(val as String) as String is private return val.capitalized def salute print '[__loopMessage] [__message] [__name]!' class Program def main g = Greet() g.message = 'hello' g.name = 'world' g.loopMessage = 5 g.salute Console.read
More about Properties in Cobra's wiki site: http://cobra-language.com/trac/cobra/wiki/Classes
And the Output is:
Unit Test and Contracts in Cobra
As stated in my series post, I'm covering strictly basics OO and other basics constructs on my code examples, but in Cobra's case I would like to add that the way you should be doing Cobra (or... the Cobra-nic style (like in Pythonic je...)) should be using Unit Tests and Contracts right from your code using test and require instructions. However, I will just show an example and keep the explanation for future posts.
Let's see an example
extend String def capitalize as String test assert ''.capitalize == '' assert 'x'.capitalize == 'X' assert 'X'.capitalize == 'X' assert 'cobrA'.capitalize == 'CobrA' body branch .length on 0, return this on 1, return .toUpper else, return this[0].toString.toUpper + this[1:] class Greet cue init(name as String) require name.length > 0 base.init _name = name.capitalize get name from var as String def salute print 'Hello [.name]!' class GreetProgram """ Greet the world! """ def main g = Greet('world') g.salute
No comments:
Post a Comment