Başlarken JavaScript

JavaScript dedikleri şey tam olarak nedir?

JavaScript web geliştirmede azımsanmayacak bir yükselişte olduğunu söyleyebiliriz. Aslında yıllar önce ünlü programcı Jeff Atwood, Atwood Yasasını şöyle dile getirmişti.

Any application that can be written in JavaScript, will eventually be written in JavaScript.

JavaScript ile ilgili çok fazla framework ve kütüphane vardır. Özellikle yeni bir JavaScript meraklısıysanız nereden ve nasıl başlayacağınızı bilmekte zorlanabilirsiniz.

Bu yazımızda yayınlayacağımız çoğu şey web uygulamaları yazma deneyimi olan kişilerin web geliştirme alanında yeni ve bir şeyler yapmak isteyenlere yöneliktir.

Özellikle JavaScript diliyle tek bir satır(veya yeteri kadar) kod yazmamış ve dil hakkında daha fazla bilgi edinmek isteyenler için yazılmıştır. JS’nin nasıl kullanıldığını ve ondan neler bekleyeceğimizi açıklama gayreti içinde olacağız.

Kısacası tecrübeli yada profesyonel bir JS’ciseniz bu makale sizin için uygun değildir. JS’e meraklıysanız ve tanışmak istiyorsanız ancak nereden başlayacağınız dan emin değilseniz bu yazımız size yardımcı olacak nitelikte hazırlanmıştır.

Buyurun başlayalım..

JavaScript’i 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, 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’i Nasıl Kullanırız?

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.

javascripti-nasil-kullanmaliyim-1

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.

javascripti-nasil-kullanmaliyim-2

Yukarıdakilerin hepsini okumak ilgi çekicidir ve neler yapabileceğimizi görmek eğlencelidir. Lakin tam olarak pratik bir bakış açısıyla JavaScript dilden ne bekleyebiliriz?

Yeni bir dil olup olmadığına bakılmaksızın veya bir dil altyapınız varsa ve yeni bir dil öğrenmek istiyorsanız dilin neler sunabileceği konusunda bir miktar beklentiniz var demektir.

Dilin iç perspektiften nasıl işlediğinden bahsettik. API’ler olsun ve mevcut olan objects(nesneler) hakkında konuşmadık. Açıkcası dilin API’lerini ve yapısal fonksiyonlar(built-in functions)ını kapsayan ayrı bir makale olacağı için onlardan bahsedemeyeceğiz.

Lakin yapısal nesneleri(built-in objects) neler kapsıyor? Bu makaleyi bitirmeden önce inceleyebileceğimiz bir kısım olabilir.

  • Object. Diğer nesnelerin temel işlevlerinden bazılarını devraldığı temel nesnedir.
  • Function. JS nesneye yönelik olduğundan, her şeyin fonksiyonlara dahil olmak üzere bir nesne olduğu anlamına gelir. Dolayısıyla yeni bir fonksiyon oluşturduğunuzda bir fonksiyon türüne sahip bir nesneye bir referans oluşturursunuz.
  • Boolean. Pek çok dilde boş kutular true veya false olan bir veri türüdür. JS de bu değerlerle çalışmaya devam edebilirsiniz ancak bunlar nesne olarak anlaşılmalıdır.
  • Number. Birçok programlama dilinde float, int, double gibi ilkel türler vardır. JavaScript’te yalnızca bir sayı türü vardır ve bu da bir nesnedir.
  • Date. Programlamada tarihlerle çalışmak hiç de eğlenceli değil, özellikle de zaman dilimleri getirirken. JS de ancak tarihlerle (yıl ve aydan güne, saat, dakika ve saniyeye kadar her zamankinden daha kolay çalışma) biraz daha kolay hale getirebilir.
  • String. Neredeyse her programlama dili ilkel bir String veri türüne sahiptir. JS de String kendi özelliklerine sahip bir nesne olması dışında çok da farklı değildir.

Aşağıdaki gibi string ve boolean ve number değişkenler oluşturabilirsiniz.

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.

JavaScript’e yeni başlıyorsanız bütün bu konuştuklarımızdan sonra onu hafife almamanızı tavsiye ederim. JS gün geçtikçe daha çok gelişiyor. Sizde işi baştan sıkı tutup biran önce öğrenmeye başlasanız hiç birşey kaybetmezsiniz ve çok şey kazanırsınız.

Geri bildiriminizi aşağıdaki yorum bölümüne bırakmayı unutmayın. Umarım faydalı olmuştur. Herkese iyi çalışmalar diliyorum. Webmaster Mutfakta kalın. ?

İşin mutfağını öğrenmek herkesin hakkı! Webmaster Kitchen işin mutfağını öğrenin.  ?



Yazar hakkında

Fatih Özel

Developer Teknovol | Çırak JavaScript Engineering

Yorumlar

2 Yorumlar

Bir yorum yaz