HTML dili her ne kadar metinler üzerinde neredeyse her türlü düzenlemeyi yapmamıza izin verse de, zayıf kaldığı bazı yönler vardır; mesela HTML bize web sayfalarına bir ‘iş’ yaptırtma, onları değişik olaylara veya durumlara duyarlı hale getirme imkanı sunmaz. Bu eksikliği Netscape firmasının yetkilileri de farketmiş olacak ki Aralık 1995 tarihinde, C dilinin browser’lara uyarlanmış hali diyebileceğimiz JavaScript’i piyasaya sürdüler.
Tam bu dönemde Sun Microsystems Pascal ve Delphi dillerinden esinlerek oluşturduğu ‘Java’ isimli bir programlama dilini piyasaya sürmek üzereydi. Netscape’in piyasaya sürdüğü script dilinin ismini JavaScript koyması, o dönemde çok telaffuz edilen ‘Java’ kelimesinin popüleritesinden yararlanmak adına uyguladığı bir pazarlama stratejisiydi, yani pek çok kişinin düşündüğünün aksine Java ile JavaScript arasında isim benzerliği hariç hiçbir benzerlik yoktur.
Bir süre sonra Microsoft da olaya el attı ve JavaScript’le neredeyse aynı olan JScript’i piyasaya sürdü.Fakat sonra bu diller farklı yönlere doğru geliştiler. Şu anda Netscape tarayıcısı JScript’i tanımıyor, fakat Explorer her iki script’i de tanıyor. Yine de iki tarayıcının JavaScript’i yorumlamaları bazen farklılık gösterebiliyor.
‘JavaScript nedir?’ :
- Netscape’in piyasaya sürdüğü script dilidir.
- JavaScript HTML kodlarının içine yazılır. Yazılan kodun bir JavaScript kodu olduğu browser’a … etiketleri ile bildirilir.
- Tıpkı HTML gibi, JavaScript kodları da yorumlanmak için bir browser’a ihtiyaç duyarlar, yani sonuçta ‘.exe’ uzantılı, bağımsız olarak çalışabilecek bir dosya oluşmaz.
- JavaScript bir olay halinde işler; olay JavaScript açısından ziyaretçinin bir yere tıklaması, bir tuşa basması vs. olabilir.
JavaScript ile neler yapılabilir?
JavaScript ile bir web sayfasına yukarıda tanımladığımız biçimde herhangi bir olayın gerçekleşmesi halinde herhangi bir iş yaptırabiliriz. Örnegin sayfada bir butona basıldığında sayfadaki bir ‘text’ kutusunun içine ‘Click!’ yazdırabiliriz. Burada olay ziyaretçinin butona tıklaması, iş ise text kutusuna ‘Click!’ yazılmasıdır… Javascript dilinde neredeyse olası her olay tanımlanmıştır, dolayısıyla yapılabilecek şeyler çok geniştir.
Javascript’i öğrenmeye geçmeden önce bir öneri: Sadece gerektiği zaman Javasript’i kullanın. Gereksiz kullanımlar sayfanın boyutunu şişireceği gibi, sayfanızın estetiğini ve kullanışlılığını de olumsuz yönde etkileyecektir.
JavaScript Tanımlamak
Muhtemelen JavaScript‘in bir “a client-side scripting language” olarak geçtiğini yani kullanıcı tarafında(client-side) çalışan betik bir dil olduğunu duymuşsunuzdur. Bu aslında web tarayıcısında çalışan bir programlama dili olduğunu söylemenin başka bir yoludur.
Alternatif olarak Wikipedia şöyle tanımlıyor.
JavaScript is a high-level, dynamic, untyped, and interpreted programming language. It has been standardized in the ECMAScript language specification.
JavaScript’in yukarıda yaptığımız tanımının yanında aynı zamanda dikkat çekici bir özelliği de server-side(sunucu tarafında) de çalışabildiğini de belirtmek gerekiyor! Öncelikle yukarıdaki bazı noktalar hakkında konuştuktan daha sonra makalemizde server-side kısmı hakkında da konuşacağız.
- High-Level. Bir programlama dili High-Level olduğunda, bilgisayarın temelini oluşturan şeyler hakkında ince ayrıntılı bilgi edinmek zorunda kalmadan programlama yapılabilen bir dil olarak kabul edilir. Belleği yönetmek zorunda değilsiniz hangi işlemcinin çalıştığını bilmeniz gerekmiyor ve pointer gibi şeylerle (C veya Assembly gibi dillerdeki gibi) uğraşmanız gerekmiyor.
- Dynamic. Dinamik olan dillerde geliştiricilerin yeni kod ekleyerek dilin belirli yönlerini genişletmesine izin verilir. Programı çalıştırırken yeni nesneleri tanıtmak yerine program sadece derlemeye ihtiyaç duyar. Bu JavaScript’in güçlü bir özelliğidir.
- Untyped. Herhangi bir programlama dili tecrübeniz varsa üzerinde çalıştığınız dilin değişken türlerini belirtmenizi gerektiren bazı dil kurallarına uymanız gerektiğini çok iyi bilirsiniz. Örneğin bir metin değişkeni tanımlamak için String kullanmamız gerekir. JavaScript’te bu gerekli değildir. Sadece var anahtar kelimesiyle bir değişkeni belirtebilirsiniz.
- Interpreted. JavaScript yorumlanır yani derleyici yoktur.
- Standardized. JavaScript standartlaştırılmıştır (resmi adı ECMAScript‘tir). Bu standardı uygulayan tüm tarayıcıların diğer tarayıcılarla aynı özellikleri sunacağı anlamına gelir.
Yukarıdaki maddelerin hepsi çok önemlidir. Dilin nasıl çalıştığını bilmek de oldukça önemlidir. Nasıl çalıştığını veya nasıl çalışması gerektiğini de bilmekte oldukça fayda olduğunu düşünüyorum.
JavaScript hakkında
JavaScript, nesneye yönelik programlama dilidir. Lakin daha önce gördüğünüzden biraz farklıdır.
JavaScript, prototypal(prototipik) dili olarak adlandırılır. Buda JavaScript’deki tüm nesnelerin String gibi prototypes(prototipler)in üzerine kurulu olduğu anlamına gelir.
Geliştiriciler prototypal inheritance(prototip kalıtımı)ni kullanarak nesnelere ek işlevsellik kazandırmayı sağlayabilir.
Prototype-based programming is a style of object-oriented programming in which behaviour reuse (known as inheritance) is performed via a process of cloning existing objects that serve as prototypes.
Daha önce hiç nesne tabanlı programlama diliye çalışmadıysanız o zaman bir avantaja sahip olabilirsiniz çünkü sırayla kafanızdaki nesne yönelimli modelin kavramları değişmeyecektir.
Eğer nesne tabanlı programlama dilleriyle çalışmalar yaptıysanız prototypal inheritance(prototip kalıtımı)nin, klasik inheritance(miras) den nasıl farklı olduğunu ayırt etmemiz gerektiğini düşünüyorum.
- Classical inheritance : Geliştiriciler olarak bir sınıf yazacağız. Bu tek sınıftan birden çok nesne oluşturulabilir. Ayrıca, bu sınıfı devralan başka bir sınıf yazabilir ve daha sonra bu sınıfların örneklerini oluşturabiliriz. Bu durumda alt sınıflar temel sınıflarıyla kod paylaşıyorlar. Dolayısıyla, bir alt sınıfın bir örneğini oluşturduğunuzda hem alt sınıfın hem de üst sınıfın işlevselliğini elde edersiniz.
- Prototypal inheritance : Sınıflar diye bir şey yok. Bunun yerine sadece bir nesne tanımlayın ve gereken her türlü işlevselliği tanıtın. Varolan bir nesneye işlevsellik eklemek istediğinizde nesnenin prototipine ekleyerek yapabilirsiniz. Number gibi bir nesne üzerinde bir yöntem çağırmaya çalışırsanız, önce o nesnedeki yöntemi araştıracaktır. Bulamazsa yöntemi bulana kadar zinciri yukarı çekecektir.
Sonunda ve belki de en önemli şey bir nesneyi prototipiyle değiştirdiğinizde o nesneyi kullanan herkes tarafından erişilebilir olmasıdır.
JavaScript Nasıl Kullanılır
JavaScript’i nasıl kullanacağımız konusu sonuç olarak hedeflerinize bağlı olarak değişiklik göstermektedir. JS ile çalışmak bir web sayfasında “bir şeyler gerçekleştirmeniz” anlamına geliyor. Sayfalardaki davranışları kontrol etmesi anlamı ifade ediyor.
Bir elementin tanıtılması, elementin kaldırılması(veya gizlenmesi) veya benzeri şeyler olabilir. Ardından web gelişti ve tarayıcılardan sunucuya asenkron çağrı yapabildiler, yanıt(response)ları işleyip bu yanıta dayalı olarak sayfanın durumunu değiştirebilme gibi işlemler yapabilme yeteneğini kazandılar.
Ajax teknolojisinden bahsetmeden olmaz. JS’nin sayfayı barındıran sunucuya çağrı yapması ve sayfayı yeniden yüklemeden tüm aldığı yanıtları işleyebilmesi için bir yoldur. Örneğin, bir arama yapacağımız zaman anahtar kelime girdiğimizde arama çubuğunun alt kısmında çıkan sonuçlar bunun bir eseridir. Farkındaysanız enter’a basmadan sunucudan herhangi bir sayfa karşımıza çıkmıyor.
Google, V8 olarak bilinen oldukça ileri düzey bir JS sözdizimsel analiz motoru geliştirdi. Diğer tarayıcılar da en iyi JS performansını sağlamak için çalışmaktadır.
Artık Node.js gibi araçları kullanarak sunucu üzerinde(server-side) JS yazabiliyoruz. Dahası mobil aygıtlarımız üzerinde çalışan karma uygulamaları(hybrid applications) bile yapabiliyoruz. Buda telefonlarımızı, tablet bilgisayarlarımızı ve masaüstü bilgisayarlarımızı JS kullanarak çözümler üretebileceğimiz anlamına geliyor.
Hangi Kütüphaneler ve Framework Kullanılabilir?
JavaScript’i kullanmaya başlamayı hedefleyen kişileri hedef aldığını söylemiştik. Dilin nasıl yapılandırıldığına ve nasıl çalıştığına dair temel bir anlayışa sahip olduğunuza göre artık web ve/veya uygulama geliştirmeyi kolaylaştırmak için sunulan kütüphanelere ve framework’lere bakmanın zamanı geldi.
- jQuery “daha az yaz, daha fazlasını yap” için imkan veren cross-browser API sağlamayı amaçlayan bir kütüphanedir.
- Angular tek sayfalık uygulamaları yapılandırmayı kolaylaştırmayı amaçlayan bir JavaScript framework’tur.
- React kullanıcı arayüzleri oluşturmak için bir JavaScript kütüphanesidir.
- Backbone web uygulamaları için model, koleksiyon ve görünüm kullanımıyla yapı kazandırmayı amaçlamaktadır.
- Ember.js “tutkulu web uygulamaları oluşturmak” için farklı bir kütüphanedir.
- Ve daha fazlası.
- JS’e yeni başlayan ve tanışanların yukarıdaki listedekilerle herhangi bir iş yapmasalar bile en azından farkında olup bilmesi gereken bir kaç seçenektir.
JS öğrenmeye başlayınca bu araçlardan bazılarını kullanmaya başladıkça ve sevdiğiniz uygulamaları yaptıkça ne kadar popüler olduklarını göreceksiniz.