Gammapedia is archived. No new edits are allowed and no new accounts can be registered.

User:Abwayax/Abwayax programming language

From Gammapedia
Revision as of 17:24, 9 October 2007 by 165.111.2.149 (talk)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

Data types

  • Scalar: holds an alphanumerical value, denoted by $
  • Array: holds a collection of values of any data type, denoted by @
  • Hash: holds a collection of values mapped to keys, denoted by %
  • Object: a data structure with methods and instance variables, denoted by *
  • Function: an executable body of code, denoted by & (all functions are defined like this)

Scope

Global scope

Everything defined outside an object or function is considered to be in the global scope. A variable is defined as public by default; to mark it as private to the currently running script, prefix the variable declaration with private. To ensure that a variable is not redefined later in the script, mark it as final.

Function scope

Anything defined inside the body of a function is considered to be in "function scope". Variables defined within a function are local to the function and cannot be referenced outside it. However, any attempt to define a variable that has the same name as one in the global scope will reference the global variable; to get around this define the variable with the keyword local.

1

$string = "A String with Spaces";
@words = split(" ",$string);
foreach(@words As $words) {
    print $string;
}

2

&foo = {
   print bar();
}
&bar = {
   return baz("foo");
}
&baz($arg) = {
   return "$arg equals $arg";
}
foo(); // foo equals foo

3

*myObj = object();
*myObj->method = {
   print "Method";
}
*myObj->method();

4

&Increaser = {
   *myObj = object();
   setType(*myObj,"Increaser");
   public-readonly *myObj->amount = 0;
   final *myObj->increase = {
       *this->amount++;
   }
   return *myObj;
}
*myIncreaser = Increaser();
*myIncreaser->increase();
*myIncreaser->increase();
print *myIncreaser->amount; // you can read it, but not write to it

5

&SuperIncreaser($step) = {
   *myObj = Increaser();
   setType(*myObj,"SuperIncreaser");
   final private *myObj->step = $step;
   final *myObj->superIncrease = {
       for($i = 0; $i < *this->step; $i++) *this->increase(); 
   }
   return *myObj;
}
*mySuperIncreaser = SuperIncreaser(40);
*mySuperIncreaser->increase(); // amount is 1;
*mySuperIncreaser->increase(); // amount is 2;
*mySuperIncreaser->superIncrease(); // amount is 42;

6

&square($num) = stringAsFunction("return \$num * \$num");
print square(5); // 25

7

&smethit($arg) = eval("smeth { $arg }");
smethit("Loop i from 1 to 10, increasing i by 1: Print i.");

8

malbolge {
(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**
hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O<
} // Hello, world.

9

java {
    JFrame frame = new JFrame();
    frame.add(new JTextArea(mySuperIncreaser.amount));
} smeth {
    Call method setTitle on frame with parameter "Dynamically Generated Project F Window".
}
*frame->setSize();
*frame->setVisible(true);

10

&pfeval($stuff) = { return eval($stuff); }
java {
    System.out.println(pfeval("*frame->getTitle()"));
} // note: the Project F eval function is not carried over into embedded languages because almost every language has its own eval

11

*aList = JavaObject("java.util.ArrayList");
*aList->add("woot");
*aList->add("pwn");
print *aList->toString();

12

/* lol */
maybe() {
    print "This line has a 50% chance of being printed.";
}
maybe(4/5) {
    print "but this line has an 80% chance";
}