5.7 KiB
ColaScript is a language that compiles in JavaScript. This language is similar to Dart, CoffeeScript, Python and PHP, with some original ideas. Compiler based on UglifyJS2. In present time compiler in development. Play with language you can in lib/index.html.
to do:
- semicolon is always required, status: done
Operators:
Unary
-
varname?bool exist = SOME?;
Binary
-
**, status: doneint pow = 5 ** 2; // 25 -
%%, status: doneint modulo = 5 %% 3; // 2 -
?=, status: donevar undef, def = 5; def ?= undef; // def == 5 undef = 6; def ?= undef; // def == 6 -
a ? bint a = 5, b = 3; a = a > 10 ? b; // a == 5 a = 11; a = a > 10 ? b; // a == 3 -
is, status: donebool isRegExp = /[^\d]+/g is RegExp; // true -
isnt, status: donebool isntString = 3.14 isnt String; // true
Multiple
-
..:Object profile = { name : "dan", nick : "dan", friends : [ { name : "eric", nick : "eric" } ], "info" : "coder" } ..name += "iil" ..nick += "green" ..friends[0]: ..name = profile.friends[0].name.capitalize() ..nick += "bro"; ..info += ", student"; -
a > b > cif( 0 < x < 100 ) console.log("x E (0; 100)");
Compilator
-
@require@require "./library/jquery.js", "./library/underscore.js" -
@use@use strict, typing @use asmjs -
@if @end_if @else@if target == 'web' @require './main.cola' @else @require './mobile/main.cola' @end_if
Expressins
-
switchassigmentionString weather = switch(temperature){ case -10: 'cold'; case 20: 'normal'; case 35: 'hot'; }; -
withscoping, status: it need??with(document.body.querySelectorAll('ul').childNodes){ var txt = 'text'; forEach((li){ li.innerHTML = txt; }); } console.log(txt); // undefined
Vars
-
declaration with type
int b = 584; Array arr = []; Object obj = {}; String str = ""; -
multiple assigment
[a, b, c] = [b, c, a]; {poet: {String name, address: [street, city]}} = futurists; [a, ..., b] = someArray;
bool
-
aliases, status: done
yes === on === true; no === off === false;
String
-
` new string `, status: done
String name = `dangreen`; -
multiline, status: done
String ml = " Lorem ipsum, Lorem ipsum. "; -
raw, status: done
String str = r"\n \r"; // "\\n \\r" -
templating, status : done
String name = "dan"; console.log("My name is @name."); // My name is dan. name = "eric"; console.log("My name is @name."); // My name is eric. console.log("My name is @{name.capitalize()} or {{name.capitalize()}}"); // My name is Eric.
RegExp
-
multiline ( and x flag ), status: done
RegExp re = / ([^\d]+)- (\w+) /gx;
Arrays
-
pushing
var arr = [3, 5, 6, 7]; arr[] = 4; // [3, 5, 6, 7, 4] -
part assigment
arr[0..2] = [0,1]; // [0, 1, 7, 4] arr[0..2] = []; // [7, 4] -
inline array ranging
arr = [10..1]; // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] arr = [1..10]; // [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
Functions
-
without
functionkeywordvoid main(){ console.log('Hello World!'); } -
binding toplevel
mainfunctions to onload event// lib.cola main(){ console.log('Hello World from lib.cola!'); } // main.cola require "./lib.cola"; main(){ console.log('Hello World!'); } -
arrow functions
print(str) => console.log(str); -
named arguments
hello(String name:) => console.log("Hello @name!"); hello(name: 'dangreen'); // Hello dangreen! hello(name: "World") => console.log("Hello @name!"); hello(); // Hello World! -
defaults for positional arguments
hello(String name = "World!") => console.log("Hello @name!"); hello('dangreen'); // Hello dangreen! hello(); // Hello World! -
some arguments into array
main(name, skills...){ console.log("My name is @name, my skills:"); skills.forEach((skill) => console.log("@skill,")); }
Classes
-
classes
-
singletones
-
injectors
class A { private int a = 123; protected var o = {}; readonly String about = "class"; A(a){ about = "some else"; } static Hello() => "hello!"; public String about() => about; } class B extends A { B(){ parent(); about += "!"; } B.anotherConstructor(){ about = "ups!"; } get some => "some " + about; set some(val) => about += val; } singleton S { // in fact this is object int x = 45; String s = "txt"; say(some){ alert(some); } int operator[](int index) => index + 584; operator[]=(int index, int val) => x = index + val; String operator.(String key) => key + "!"; operator.(String key, String value) => s = "@key @value"; } injector String { String replaceAll(a, b){ String res = this; while(res.indexOf(a) != -1) res = res.replace(a, b); return res; } } // or String String::replaceAll(a, b){ String res = this; while(res.indexOf(a) != -1) res = res.replace(a, b); return res; }
Statistic
- 30 feature ( without classes )
- 12 done
