Selamlar,
Bilindiği üzere JavaScript ile uygulama geliştirme çok zahmetli, OOP bir dil olmasına rağmen class tanımlaması yapamıyor miras alma gibi OOP olanaklarını kullanabileceğiniz olanakları yok. Çok dağınık geliştirme araçları var. Neredeyse her yıl değişiyor. Birden fazla bağımlık yönetim aracı var ve yarın hangisinin yok olacağını belli değil. Js ile uygulama yazarken bir süre sonra GruntJs gibi araçlar kendisinizi uğraşır buluyorsunuz. Veriminiz düşüyor. JS hata affetmez yapısı da ayrı bir dava. Bir hatayı bulmak için günleriniz gidiyor. Js ile kod yazanlar özellikle bir JS frameowrkü ile çalışanlar bunun farkına varmıştır. Yakın zamanda bu olanakların geleceği pek olası değil.
EcmaScript 6 ile gelmesi planlanan yenilikler:
https://github.com/lukehoban/es6features
Bu tür sorunlara çözüm olarak alternarifler, En meşhuru Coffee Script. özellikle rubyci ve pythoncular sık kullanıyorlar. Mesala koding.com'un ön yüzünden sıkllıkla kullanılıyor. Coffee scipt kullnacaksınız, yine GruntJS gibi araçları kullanmak zorunda kalıyorsunuz. derleme, minify ve test işlemleri vb.. işler için.. En azında Coffee'nin kodlaması JS'den çok daha konforlu.
Basit bir örnek:
Bir sınıfı miras alalım
JS ile
var Animal, Horse, Snake, sam, tom,
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
hasProp = {}.hasOwnProperty;
Animal = (function() {
function Animal(name) {
this.name = name;
}
Animal.prototype.move = function(meters) {
return alert(this.name + (" moved " + meters + "m."));
};
return Animal;
})();
Snake = (function(superClass) {
extend(Snake, superClass);
function Snake() {
return Snake.__super__.constructor.apply(this, arguments);
}
Snake.prototype.move = function() {
alert("Slithering...");
return Snake.__super__.move.call(this, 5);
};
return Snake;
})(Animal);
Horse = (function(superClass) {
extend(Horse, superClass);
function Horse() {
return Horse.__super__.constructor.apply(this, arguments);
}
Horse.prototype.move = function() {
alert("Galloping...");
return Horse.__super__.move.call(this, 45);
};
return Horse;
})(Animal);
Coffee ile
class Animal
constructor: (@name) ->
move: (meters) ->
alert @name + " moved #{meters}m."
class Snake extends Animal
move: ->
alert "Slithering..."
super 5
class Horse extends Animal
move: ->
alert "Galloping..."
super 45
Bir de Js'de prototype kullanımı ciddi deneyim istiyor. Çok kolay hata yapabilirsiniz yazarken.
TypeScript dili de Coffee dili gibi bir js yorumlayıcısı. Yukardaki örneğe benzer sancılı işleri sizin yerinize o yapıyor.
TypeScipt Micrsoftun open source olarak geliştiriği bir dil. Ve kendi IDE'si de bu dili destekliyor. Özellikle C# ile proje geliştirenlen için Visual Studio içinde Type Script desteği de var.
Google ise Dart diye bir dil geliştirmiş. Java ile benzerlikleri var. Dart dili derlenip js dönüştürülebiliyor. Diğerlerinden farklı olarak Dart'ın Js'den bağımsız çalışabilmesi için DartVM ortamı var. Chrome ve Chromium'un son sürümleri üzerinde çalışabiliyor. Eclipse'den fork edilmiş bir IDE'si var. Bir kaç deneme yaptım gayette kullanışlı. Minify, js derlemesi, test gibi işler için 3.party yazılımlarla uğraşmak zorunda kalmıyorsunuz. Hazır kütüphanelerle geliyor.
Boş vakitlerimde hobi olarak geliştireceğim basit bir single page uygulama yazacam. Bunu yazarken, php, golang, ve tarayıcıda çalışan bir dil kullacam. Coffee, TypeScript ve Dart.
Özellikle Coffee ve TypeScript kullanıcılarının yorumlarını merak ediyorum. Siz olsanız bu dillerden hangisini seçerdiniz.