diff --git a/haxe.html.markdown b/haxe.html.markdown index 82031291..90b2e250 100644 --- a/haxe.html.markdown +++ b/haxe.html.markdown @@ -12,22 +12,29 @@ may be applicable to older versions, but it is recommended to use other references. ```haxe -// Welcome to Learn Haxe 3 in 15 minutes. http://www.haxe.org -// This is an executable tutorial. You can compile and run it using the haxe -// compiler, while in the same directory as LearnHaxe.hx: -// haxe -main LearnHaxe3 -x out +/* + Welcome to Learn Haxe 3 in 15 minutes. http://www.haxe.org + This is an executable tutorial. You can compile and run it using the haxe + compiler, while in the same directory as LearnHaxe.hx: + haxe -main LearnHaxe3 -x out + */ // Let's start with comments... this is a single line comment /* - And this is multiline -*/ + And this is multiline. Multiline comments are also used to generate + javadoc-style documentation for haxedoc. They will be used if they precede + a class, class function, or class variable. + */ -// A package declaration isn't necessary, but it's useful if you want to -// organize your code into modules later on. Also worth mentioning, all -// expressions in Haxe must end in a semicolon: +/* + A package declaration isn't necessary, but it's useful if you want to + organize your code into modules later on. Also worth mentioning, all + expressions in Haxe must end in a semicolon: + */ package; // empty package, no namespace. + // if you import code from other files, it must be declared before the rest of // the code. import haxe.ds.ArraySort; @@ -66,12 +73,14 @@ class LearnHaxe3{ /* Trace can handle any type of value or object. It will try to print - a representation of the expression as best it can: + a representation of the expression as best it can. You can also + concatenate strings with the "+" operator: */ trace( " Integer: " + 10 + " Float: " + 3.14 + - " Boolean: " + true); + " Boolean: " + true + ); /* @@ -113,9 +122,9 @@ class LearnHaxe3{ var hex_integer = 0xffffff; /* - Haxe uses platform precision for Int and Float sizes. It also - uses the platform behavior for overflow. - (Other numeric types and behavior are possible using special + Haxe uses platform precision for Int and Float sizes. It also + uses the platform behavior for overflow. + (Other numeric types and behavior are possible using special libraries) */ @@ -125,9 +134,12 @@ class LearnHaxe3{ structures like strings, arrays, lists, and maps: */ - var a_string = "some_string"; // strings can have double or single quotes + var a_string = "some" + 'string'; // strings can have double or single quotes trace(a_string + " is the value for a_string"); + var x = 1; + var an_interpolated_string = 'the value of x is $x'; + /* Strings are immutable, instance methods will return a copy of parts or all of the string. @@ -280,11 +292,13 @@ class LearnHaxe3{ // while also creating filters and modifications. var filtered_n = [for (val in n) if (val != "foo") val]; trace(filtered_n + " is the value for filtered_n"); + var modified_n = [for (val in n) val += '!']; trace(modified_n + " is the value for modified_n"); + var filtered_and_modified_n = [for (val in n) if (val != "foo") val += "!"]; trace(filtered_and_modified_n + " is the value for filtered_and_modified_n"); - + ////////////////////////////////////////////////////////////////// // Switch Statements (Value Type) ////////////////////////////////////////////////////////////////// @@ -310,41 +324,41 @@ class LearnHaxe3{ trace("My dog's name is" + my_dog_name + ", and his favorite thing is a: " + favorite_thing); - + ////////////////////////////////////////////////////////////////// // Expression Statements ////////////////////////////////////////////////////////////////// trace("***EXPRESSION STATEMENTS***"); - + /* Haxe control statements are very powerful because every statement is also an expression, consider: */ - + // if statements var k = if (true){ 10; } else { 20; } - + trace("K equals ", k); // outputs 10 - + var other_favorite_thing = switch(my_dog_name) { case "fido" : 'teddy'; case "rex" : 'stick'; case "spot" : 'football'; - case _ : 'some unknown treat'; + case _ : 'some unknown treat'; } - + trace("My dog's name is" + my_dog_name + ", and his other favorite thing is a: " + other_favorite_thing); - + ////////////////////////////////////////////////////////////////// // Converting Value Types ////////////////////////////////////////////////////////////////// - + // You can convert strings to ints fairly easily. // string to integer @@ -359,26 +373,31 @@ class LearnHaxe3{ // See documentation for parsing in Std for more details. ////////////////////////////////////////////////////////////////// - // Basic Object Oriented Design + // Basic Object Oriented Programming ////////////////////////////////////////////////////////////////// - trace("***BASIC OBJECT ORIENTED DESIGN***"); + trace("***BASIC OBJECT ORIENTED PROGRAMMING***"); + // create an instance of FooClass. The classes for this are at the + // end of the file. var instance = new FooClass(3); + // read the public variable normally trace(instance.public_any + " is the value for instance.public_any"); // we can read this variable trace(instance.public_read + " is the value for instance.public_read"); - // but not write it, this will throw an error if uncommented: - //trace(instance.public_write + " is the value for instance.public_write"); - // trace(instance.public_write); // vice-versa for public write, etc. + // but not write it + // instance.public_write = 4; // this will throw an error if uncommented: + // trace(instance.public_write); // as will this. trace(instance + " is the value for instance"); // calls the toString method + trace(instance.toString() + " is the value for instance.toString()"); // same thing - // we can successfully pass the FooInstance to the BaseFooClass method, - // since it was extended from that. + // instance has the "FooClass" type, while acceptBaseFoo has the + // BaseFooClass type. However, since FooClass extends BaseFooClass, + // it is accepted. BaseFooClass.acceptBaseFoo(instance); } @@ -389,12 +408,12 @@ class LearnHaxe3{ */ class FooClass extends BaseFooClass implements BaseFooInterface{ public var public_any:Int; // public variables are accessible anywhere - public var public_read (default,null): Int; // use this style to only enable public read + public var public_read (default,null): Int; // use this style to only enable public read public var public_write (null, default): Int; // or public write public var property (get, set): Int; // use this style to enable getters/setters // private variables are not available outside the class. - // see @:allow for ways around this. + // see @:allow for ways around this. var _private:Int; // variables are private if they are not marked public // a public constructor @@ -416,13 +435,13 @@ class FooClass extends BaseFooClass implements BaseFooInterface{ _private = val; return val; } - + // special function that is called whenever an instance is cast to a string. public function toString(){ return _private + " with toString() method!"; } - // this class needs to have this function defined, since it implements + // this class needs to have this function defined, since it implements // the BaseFooInterface interface. public function baseFunction(x: Int) : String{ // convert the int to string automatically @@ -430,6 +449,9 @@ class FooClass extends BaseFooClass implements BaseFooInterface{ } } +/* + A simple class to extend +*/ class BaseFooClass { var base_variable:Int; public function new(){ @@ -437,9 +459,11 @@ class BaseFooClass { } public static function acceptBaseFoo(b:BaseFooClass){ } - } +/* + A simple interface to implement +*/ interface BaseFooInterface{ public function baseFunction(x:Int):String; }