Well I decided to teach my self Coffeescript and was hoping to find a little tutorial for people coming from a PHP background, but was surprised when the internet came up short.
Well, see a need.. fill a need!
CoffeeScript: Default Parameter
intro = (name, gender = "friend")->
"Hi " + name + " my " + gender
Console.log intro("Brian")
PHP
function intro($name, $gender = 'friend'){
return 'Hi'.$name.' my '.$gender ;}
echo intro('Brian');
CoffeeScript: Modify A Argument's Value
intro = (name, gender = "friend")->
gender = gender +"!";
"Hi " + name + " my " + gender
Console.log intro("Brian")
PHP
function intro($name, $gender = 'friend'){
$gender .= '!';
return 'Hi'.$name.' my '.$gender ;
}
echo intro('Brian');
CoffeeScript: String Interpolation
myScore = 6
console.log "my score was #{myScore}"
PHP
$myScore = 6;
echo "my score was $myScore"
CoffeeScript: Chained Comparisons
myScore = 6
pass = 10 > myScore > 5
PHP
$myScore = 6;
$pass = 10 > $myScore ? $myScore > 5 : false;
CoffeeScript: Hash Map
items = {a:'z', b:'y', c:'x'}
PHP
$items = ['a'=>'z', 'b'=>'y', 'c'=>'x'];
CoffeeScript: Array
items = [
1,0,0
0,1,0
0,0,1
]
CoffeeScript will automatically add a comma at the end of each line in an array is not present
PHP
$items = [
1,0,0,
0,1,0,
0,0,1
];
CoffeeScript: If
x = true
y = false
if x and y
console.log true
else
console.log false
PHP
$x = true
$y = false
if( $x and $y)
echo 'true';
else
echo 'false';
Here the example of using endif
if( $x and $y):
echo 'true';
else:
echo 'false';
endif
CoffeeScript: Ternary Operator
if x or y then console.log true else console.log false
coffee supports
and, or
PHP
echo $x or $y ? 'true' : 'false'
CoffeeScript: Not With Assignment
x = null
x or= true
PHP
$x = null;
$x = !$x ? true : $x;
for this, the ternary operator must have an else. So i'm using it's own value to simulat no effect.
CoffeeScript: Splats(Function Overloading)
party = (first, second, rest...) ->
console.log first
console.log second
console.log rest
PHP
function party(first, second){
echo $first;
echo $second;
$rest = func_get_args();
array_shift($rest);//remove first
array_shift($rest);//remove second
echo implode(',',$rest);
}
You don't need implode, I'm just using it to print the exter value from this array.
CoffeeScript: For In/Each
hello = {en: "hi", fr:"Boj", it,"bon"}
speak = (lang) ->
console.log hello[lang]
speak language for language in ["en","fr","it"]
PHP
$hello = ['en'=>'hi', 'fr'=>'Boj', 'it'=>'bon'];
function speak($lang){
global $hello;
echo $hello[$lang];
}
foreach(['en','fr','it'] as $language) speak($language);
CoffeeScript: Sequence
countdown = (num for num in [10..1])
countdown = (num*2 for num in [10..1])
PHP
$countdown = range(10,1)
$countdown = range(10, 1, 2)
CoffeeScript: Parsing An Array
ages = {chuck:31, steven:29, julie:27}
tell = for person, age of ages
person + " is "+age+" years old"
PHP
$ages = ['chuck' => 31, 'steven' => 29, 'julie' => 27];
foreach($ages as $person=> $age)
$tell[] = $person.' is '.$age.' years old';
CoffeeScript: Class
class Vehicle
move: (miles) ->
console.log miles+"miles"
car = new Vehicle
car.move(1000)
PHP
class Vehicle{
public function move($_miles){
echo $_miles.' miles';
}
}
$car = new Vehicle();
$car->move(1000);
CoffeeScript: Attributes
class Vehicle
setMiles: (@miles)
getMiles: -> @miles
car = new Vehicle
car.setMiles(1000)
console.log car.getMiles
PHP
class Vehicle{
public $miles
public function setMiles($_miles){
$this->miles = $_miles;
}
public function getMiles(){
return $this->miles;
}
}
$car = new Vehicle();
$car->setMiles(1000);
echo $car->getMiles();
CoffeeScript: Inheritance
class Vehicle
constructor: (@name) ->
move: (miles) ->
console.log @name + " drove "+miles+"miles"
class VWBug extends Vehicle
move: ->
console.log "fast"
super 100
class Truck extends Vehicle
move: ->
console.log "slow"
super 20
mater = new Truck "Mater"
her = new VWBug "Herbie"
mater.move()
her.move()
PHP
class Vehicle{
private $name;
public function __constructor($_name){
$this->name = $_name;
}
public function move($_miles){
echo $this->name.' dove '.$_miles.' miles';
}
}
class VWBug extends Vehicle {
public function move($_miles = 100){
echo 'fast';
parent::move($_miles);
}
}
class Truck extends Vehicle{
public function move($_miles = 50){
echo 'slow';
parent::move($_miles);
}
}
$mater = new Truck("Mater");
$her = new VWBug("Herbie");
$mater->move();
$her->move();