Continue with the Basics by Example; today's version of the post written in Boo 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
// Boo Basics namespace BooGreetProgram import System private class Greet: // Fields or Attributes private message as string private name as string private loopMessage as int // Properties public Message as string: get: return self.message set: self.message = self.Capitalize(value) public Name as string: get: return self.name set: self.name = self.Capitalize(value) public LoopMessage as int: get: return self.loopMessage set: self.loopMessage = value // Constructor public def constructor(): self.message = "" self.name = "" self.loopMessage = 0 // Overloaded Constructor public def constructor(message as string, name as string, loopMessage as int): self.message = self.Capitalize(message) self.name = self.Capitalize(name) self.loopMessage = loopMessage // Method 1 private def Capitalize(val as string) as string: // "if-then-else" statement if val.Length >= 1: return val[0].ToString().ToUpper() + val.Substring(1, val.Length - 1) else: return "" // Method 2 public def Salute() as void: // "for" statement for i as int in range(0, self.loopMessage): print "${self.message} ${self.name}!" // Overloaded Method 2.1 public def Salute(mesage as string, name as string, loopMessage as int) as void: // "while" statement i as int = 0 while i < loopMessage: print "${self.Capitalize(message)} ${self.Capitalize(name)}!" i++ // Overloaded Method 2.2 public def Salute(name as string) as void: // "switch/case" statement is not supported // so I'm using if then else if... dtNow as DateTime = DateTime.Now hh as int = dtNow.Hour if hh==6 or hh==7 or hh==8 or hh==9 or hh==10 or hh==11: self.message = "good morning," elif hh == 12 or hh == 13 or hh == 14 or hh == 15 or hh == 16 or hh == 17: self.message = "good evening," elif hh == 23 or hh == 0 or hh == 1 or hh == 2 or hh == 3 or hh == 4 or hh == 5: self.message = "good night," else: self.message = "huh?" print "${self.Capitalize(self.message)} ${self.Capitalize(name)}!" // Console Program public def Main(argv as (string)): // Define variable object of type Greet g as Greet // Instantiate Greet. 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, "boo", g.LoopMessage) // Call Overloaded Method 2.2 g.Salute("carlos") // Stop and exit print "Press any key to exit..." Console.ReadKey()
Greetings Program - Minimal
// Boo Basics import System class Greet: // Fields or Attributes message as string name as string loopMessage as int // Properties Message as string: get: return message set: message = Capitalize(value) Name as string: get: return name set: name = Capitalize(value) LoopMessage as int: get: return loopMessage set: loopMessage = value // Constructor def constructor(): message = "" name = "" loopMessage = 0 // Overloaded Constructor def constructor(message as string, name as string, loopMessage as int): self.message = Capitalize(message) self.name = Capitalize(name) self.loopMessage = loopMessage // Method 1 private def Capitalize(val as string) as string: // "if-then-else" statement if val.Length >= 1: return val[0].ToString().ToUpper() + val.Substring(1, val.Length - 1) else: return "" // Method 2 def Salute(): // "for" statement for i as int in range(0, self.loopMessage): print "${message} ${name}!" // Overloaded Method 2.1 def Salute(mesage as string, name as string, loopMessage as int): // "while" statement i = 0 while i < loopMessage: print "${Capitalize(message)} ${Capitalize(name)}!" i++ // Overloaded Method 2.2 def Salute(name as string): // "switch/case" statement is not supported // so I'm using if then else if... dtNow = DateTime.Now hh as int = dtNow.Hour if hh==6 or hh==7 or hh==8 or hh==9 or hh==10 or hh==11: message = "good morning," elif hh == 12 or hh == 13 or hh == 14 or hh == 15 or hh == 16 or hh == 17: message = "good evening," elif hh == 23 or hh == 0 or hh == 1 or hh == 2 or hh == 3 or hh == 4 or hh == 5: message = "good night," else: message = "huh?" print "${Capitalize(message)} ${Capitalize(name)}!" // Console Program // Define variable object of type Greet and Instantiate Greet. 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, "boo", g.LoopMessage) // Call Overloaded Method 2.2 g.Salute("carlos") // Stop and exit print "Press any key to exit..." Console.ReadKey()
And the Output is:
Auto-Implemented Properties in Boo
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.
//That means that we can omit the Fields/Attributes declaration //and go directly to the properties class Greet: // Fields or Attributes //message as string //name as string //loopMessage as int // Properties [Property(Message)] message as string [Property(Name)] name as string [Property(LoopMessage)] loopMessage as int // then, when ever you want to use them you get and set their value using the properties or using the auto-generated attributes (different from C# where you need to use the property) // Let's see an example in our parameter-less constructor // Constructor def constructor(): self.Message = "" self.Name = "" self.LoopMessage = 0 // or self.message = "" self.name = "" self.loopMessage = 0
No comments:
Post a Comment