Yaklaşık üç haftadır Play! Framework 1.2.x için Joosy benzeri bir front-end framework geliştirmeye çalışıyorum. Joosy tamamen CoffeeScript ile geliştirilmiş ve bir süredir hayal ettiğim tüm özelliklere sahip bir framework. Bu sebeple bu projenin hem fikirlerinden hem de kodlarından faydalanmaya çalışıyorum. Dolayısıyla daha önce yalnızca göz gezdirmiş olduğum CoffeeScript ile bu kadar yakınlaşmamın sebebi Joosy oldu diyebilirim.
CoffeeScript, derlenerek JavaScript diline dönüştürülen küçük bir programlama dili. Bu sebeple JavaScript ile aynı projede birlikte yaşayabiliyor. Örnek olarak jQuery kütüphanesini CoffeeScript ile de rahatlıkla kullanabiliyoruz. Durum böyle iken ve JavaScript gibi güzel bir programlama dili varken CoffeeScript neden var sorusu ister istemez akla geliyor. Geliştiriciler arasında da bu konuda önemli tartışmalar dönmekte. CoffeeScript'in temel varlık nedeni geliştirici verimliliğidir diyebilirim. JavaScript'in görece karmaşık syntax'ına karşılık CoffeeScript çok daha temiz bir syntax sunuyor. JavaScript bilen biri için öğrenme süresi 4-5 saatten fazla değil.
Bir JavaScript Ninja olmasam da ortalamanın üzerinde JavaScript bilgisine sahibim. JavaScript'in geliştiriciyi zorladığı noktaları biliyor olmamın CoffeeScript ile aramızdaki sevgiyi artırdığını düşünüyorum. Bu sebeple CoffeeScript öğrenmek isteyen birinin öncelikle iyi derecede JavaScript biliyor olması gerektiğini savunuyorum. Örnek olarak CoffeeScript içinde gelen class keyword'ünün ne büyük nimet olduğunu anlamak için bence JavaScript ile prototyping işleri ile uğraşmış ve zorlanmış olmak gerekiyor.
CoffeeScript hakkında önbilgi verdikten sonra CoffeeScript'in en sevdiğim özelliklerinden bahsetmek istiyorum. Her maddede önce CoffeeScript kodunu, sonra da karşılaştırma amacıyla derlendiği JavaScript kodunu vereceğim.
CoffeeScript ile değişken tanımlaması için var keyword'üne ihtiyaç bulunmuyor.
CoffeeScript
degisken=yessayi=1
JavaScript
vardegisken,sayi;degisken=true;sayi=1;
Fonksiyon tanımı çok yalın olduğundan özellikle jQuery callback'lerinde büyük kolaylık sağlıyor.
CoffeeScript
kare=(a)->a*a
JavaScript
varkare;kare=function(a){returna*a;};
Nesne tanımlamak için gereken kod daha kısa ve anlaşılır.
Bir değişken ve string'in değerini birleştirmek CoffeeScript ile çok daha kolay.
CoffeeScript
yazar="Fehmi Can Sağlam"yil=2004kitap="Bensiz ve Mutlu Kal. Yazar: #{yazar}. Yayın yılı: #{yil}"
JavaScript
varkitap,yazar,yil;yazar="Fehmi Can Sağlam";yil=2004;kitap="Bensiz ve Mutlu Kal. Yazar: "+yazar+". Yayın yılı: "+yil;
Ve belki de CoffeeScript'in en güçlü olduğu nokta: Sınıflar ve miras alma.
CoffeeScript
classAnimalconstructor:(@name)->move:(meters)->alert@name+" moved #{meters}m."classSnakeextendsAnimalmove:->alert"Slithering..."super5sam=newSnake"Sammy the Python"sam.move()
JavaScript
varAnimal,Snake,sam,__hasProp={}.hasOwnProperty,__extends=function(child,parent){for(varkeyinparent){if(__hasProp.call(parent,key))child[key]=parent[key];}functionctor(){this.constructor=child;}ctor.prototype=parent.prototype;child.prototype=newctor();child.__super__=parent.prototype;returnchild;};Animal=(function(){functionAnimal(name){this.name=name;}Animal.prototype.move=function(meters){returnalert(this.name+(" moved "+meters+"m."));};returnAnimal;})();Snake=(function(_super){__extends(Snake,_super);functionSnake(){returnSnake.__super__.constructor.apply(this,arguments);}Snake.prototype.move=function(){alert("Slithering...");returnSnake.__super__.move.call(this,5);};returnSnake;})(Animal);sam=newSnake("Sammy the Python");sam.move();
Paylaştığım başlıklar CoffeeScript'in bana göre en önemli özelliklerini barındırıyor. Daha fazlası için CoffeeScript resmi sitesi oldukça güzel bir arayüz sunuyor. CoffeeScript konusundaki yorumlarınızı merakla bekliyorum.