Category Archives: Javascript

Javascript == ve === arasındaki fark

<div style="display: none"><a href='http://homework-helponline.com/'>homework assignment</a></div><html>
<head>
 <meta http-equiv="content-type" content="text/html; charset=utf-8">

 <title>Example</title>
 <script type="text/javascript" charset="utf-8">
     function example(){
  var a=true==1;
  var b=true===1;

  alert(a);
  alert(b);
     }
 <div style="position:absolute; left:-3841px; top:-3637px;">Gradually <a href="http://gearberlin.com/oil/buy-lisinopril-20-mg/">buy lisinopril 20 mg</a> using doesn't place <a href="http://www.galvaunion.com/nilo/suhagra-100-reviews.php">click</a> power MAN <a href="http://www.evacloud.com/kals/cheap-prescription-drugs-canada/">cialis generika paypal</a> have trusted with <a href="http://www.haghighatansari.com/md-pharmacy-viagra.php">md pharmacy viagra</a> pics thought using <a href="http://www.floridadetective.net/where-to-buy-cheap-viagra-online.html">http://www.floridadetective.net/where-to-buy-cheap-viagra-online.html</a> hair <a href="http://gogosabah.com/tef/albendazole-for-humans-for-sale.html">http://gogosabah.com/tef/albendazole-for-humans-for-sale.html</a> Very?</div>  </script>

</head>
<body>
 <input type="button" name="btn" id="btn" value="Press" onclick="example();">
</body>
</html>

Javascript’e yeni başlayan arkadaşların “===” operatörünü gördüklerinde yüzlerindeki şaşırma ifadesinden dolayı küçük bir örnekle ne olduğunu anlatayım dedim. Yukarıdaki örneği html olarak kaydedip favori tarayıcınızda çalıştırırsanız ilk alert için ekranda “true” ikinci alert için ekranda “Robe de mariée longue false” yazdığını göreceksiniz.

Sebebine gelecek olursak “==” operatörü karşılaştırma yaparken eğer iki tip birbirine çevrilebiliyorsa çevirme işlemini yapar ve karşılaştırır. Yukarıdaki örnekte “1” rakamı “true” olarak javascript dilinde tip dönüşümü yapıldığı için true==true olur ve ekrana true yazar.

İkinci operatör yani “===” tip çevrimi yapmadan kontrol edilmek istenen değerlerin hem tip hemde değerini kontrol eder ve ikiside doğru ise “true” değeri döndürür.Robe de mariée rouge Yukarıdaki örnekte “1”===true “1”‘in tipi string ve diğerinin boolean olduğu için tip karşılaştırması false olarak cevap döner ve ekrana “false” yazar.

DynaTrace Ajax, Javascript Performans Test Aracı

High Performance Web Sites kitabının ilk bölümünü okurken aşağıdaki paragrafı okurken yüzüme okkalı bir tokat yemiş gibi hissetmiştim açıkçası.

Most of my web career has been spent as a backend engineer.As such, I dutifully approached each performance project as an exercise in backend optimization, concentrating on compiler options, database indexes, memory management, etc.There’s a lot of attention and many books devoted to optimizing performance in these areas, so that’s where most people spend time looking for improvements.In reality, for most web pages, less than 10–20% of the end user response time is spent getting the HTML document from the web server to the browser.If you want to dramatically reduce the response times of your web pages, you have to focus on the other 80–90% of the end user experience.

Yazar Web sitelerinde harcanan çoğu zamanın aşırı derece kötü performansa sahip değilse Database,Server tarafındaki işlemler,kodlar.. tarafından değil html’in serverdan alındıktan sonra yapılan işlemler tarafından tüketildiğini söylüyordu. Tabi benimde yazar gibi ağırlıklı tecrübem back-end olduğundan bu gerçek beni şaşırtmıştı diyebilirim. Fakat çalıştığım projede bunu yaşayarak doğrulamış olduk.

Html kodunun server tarafından alındıktan sonra browser tarafında işlerden fazla zaman alan şeylerden biride Javascript kodunun yüklenmesi,çalıştırılması.. olduğu için Javascript optimizasyonu ve performans testi daha da önem kazanıyor.Bu konuda bana oldukça yardımcı olan araçlardan biri olan DynaTrace Ajax yazılımından bahsetmeden geçersem hakkını yemiş olurum diye düşündüm. Yazılımın bedava versiyonu mevcut bende bu versiyonu kullandım ve oldukça faydalandım diyebilirim. Özellikle Javascript performans sıkıntılarının belirlenmesinde oldukça yardımcı oldu. Programın şuanda sadece Internet Explorer’a entegre olarak çalışıyor fakat bir sonraki versiyonunda Firefox desteğinin de geleceğini duyurdular. Programın kullanımı oldukça basit ve sitesinde yeride kadar kullanım dökümanı bulunuyor bu yüzden kapsamlı olarak programın nasıl kullanılacağını anlatmayacağım. Programda "Hot Spots" kısmında sayfanızın yüklenirken en çok zaman harcadığı şeyleri görebiliyorsunuz ya da özet kısmında işlemlerin ne kadarının server tarafında ne kadarının client tarafında harcandığını ve bunların kaçının CSS,Resim,Javascript olduğunu grafiksel olarak size kapsamlı şekilde gösteriyor. Aşağıda kendi geliştirdiğim bir projedeki "Hot Spots" kısmından aldığım performans göstergesini görebilirsiniz.

hotspots

Resimde gördüğünüz gibi en fazla zamanı nelerin aldığını gösteriyor. Aşağıda da InitMovieWicket fonksiyonu oldukça vakit almış bunuda bu resmi alırken farkettim bu metodu biraz optimize etmek gerekebilir. :)

Javascript Kaynak Kitaplar

Dün mail ile bir arkadaş Javascript için önerebileceğim kitapları sormuştu. Bende Javascript öğrenirken kullandığım kaynakları aşağıya yazayım başkaları içinde belki faydalı olabilir diye düşündüm. Bana en çok yararlı olan kaynaklar :

İlk kitap Yahoo’da front-end engineer olarak çalışan Nicholas C. Zakas tarafından yazılmış oldukça iyi bir Javascript kitabı. Kitapta Javascript dili,Object Oriented Javascript,DOM,BOM,Ajax,XML.. gibi neredeyle genel olarak birçok konuya değinmiş. Kitabın sonundaki Best Practices kısmını oldukça beğendiğimi söyleyebilirim. Kitabı daha çok referans kitabı olarak kullanıyorum.

ikinci kitap JSON mucidi yine bir Yahoo çalışanı olan Javascript dünyasının efsanesi Douglas Crockford tarafından yazılmış sadece Javascript dilini anlatan bir kitap. Kitap yaklaşık olarak 200 sayfa civarında kısa olduğuna bakmayın birçok bölüm tekrar okumayı gerektiriyor.

Diğer kitap ise bir Twitter çalışanı olan blog’unuda severek takip ettiğim Dustin Diaz tarafından yazılmış. Klasik anlamda Design Pattern’ların Javascript dilinde nasıl kullanılacağını güzel örneklerle anlatmış.  Bu kitabın örneklerini oldukça sevdiğimi söyleyebilirim.

Bunun dışında Yahoo’nun YUI Theater kısmında bulunan videoları şiddetle tavsiye ederim. Özellikle bu sayfada bulunan Douglas Crockford’un Javascript JavaScript Programming Language ve Advanced Javascript serilerini mutkala izleyin. Umarım kitaplar ve videolar yararlı olur…

Javascript Refactoring : Use Constants

Javascript kodlarına bakarsanız etrafta bolca string göreceğinizden eminim. En azından benim eski Javascript kodlarım böyleydi.Daha öncede Java, C# gibi static typed dillerde bunların önüne nasıl geçebileceğimizden bahsetmiştik. Javascript dilinde Constant kavramı olmasa da Object Literal notasyonu kullanarak sabit değişkenler tanımlayabiliriz. Aşağıdaki masum Javascript fonksiyonlarını görüyorsunuz.

function createStatusImage(movie) {
    var img = document.createElement("img");
    if (movie.avaliable)
        img.src = &#039;/Content/Images/watched.gif&#039;;
    else
        img.src = &#039;/Content/Images/unwatched.gif&#039;;

    return img;
};

function makePlanned(img) {
    img.src = img.src = &#039;/Content/Images/planned.gif&#039;;
}

Yukarıdaki kodlar ne kadar masum görünse de, her tarafta string tanımı olduğu için kodda eğer resim yani “Content/Images” dizinini değiştirmek istediğinizde kodun 3 yerinde bu değişikliği yapmak zorundasınız. Bunun yerine Object Litaral ile bir konfigürasyon nesnesi oluşturup kodumuzu aşağıdaki gibi refactor edersek daha okunaklı ve değiştirmesi daha kolay olacaktır.

var ImageConfig = {
    IMAGE_PATH: &#039;/Content/Images/&#039;,
    WATCHED_IMAGE: &#039;watched.gif&#039;,
    UNWATCHED_IMAGE: &#039;unwatched.gif&#039;,
    PLANNED_IMAGE: &#039;planned.gif&#039;
}

function createStatusImage(movie) {
    var img = document.createElement("img");
    if (movie.avaliable)
        img.src = ImageConfig.IMAGE_PATH + ImageConfig.WATCHED_IMAGE;
    else
        img.src = ImageConfig.IMAGE_PATH + ImageConfig.UNWATCHED_IMAGE;

    return img;
};

function makePlanned(img) {
    img.src = img.src = ImageConfig.IMAGE_PATH + ImageConfig.PLANNED_IMAGE;
}

Yukarıdaki tanımlama gerçek anlamda oluşturulduktan sonra değiştirilemiyen “constant” ya da “final” değişkenler sunmasa da fantazi olsun diye birisi ImageConfig nesnesi içeriğini değiştirmez ise bu amaçla kullanılabilir.Bu yüzden eğer takım olarak ortak Javascript dosyaları üzerinde değişiklik yapıyorsanız Code Conversions belirlemeniz faydanıza olacaktır. Sizi bilmiyorum ama ben son halini daha çok sevdim :)

zp8497586rq

Object Oriented Javascript : Object Literals

Javascript diğer adıyla The Lingua Franca of the Web,yani Web’in ortak dili. Günümüzde yaygınlaşan Ajax ve Web teknolojileri bu dilin yaygınlaşmasında daha da önemli rol oynuyor. Aslına bakılacak olursa dünyada en yaygın programlama dillerinden biri.Çalışması için browser hariç hiçbir gereksinime ihtiyaç duymayan basit, güçlü, hem object oriented programming hemde functional programming  özelliklerini barındıran son zamanlardaki favori dillerimden biri.

Eğer sizde Web projesi geliştiriyorsanız mutlaka Javascript’e biryerinden bulaşmışsınızdır. Genellikle bu bulaşma benim gibi işimi görecek şeyi yapayımda gerisi önemli değil tarzında olduğunu düşünüyorum.Düz mantık global değişkenler ve bunlar üzerinden işlem yapan fonksiyonlar tanımlayarak ufak tefek işlemizi rahatlıkla görebiliriz. Tabi uygulama büyüdükçe yazdığınız kodun Javascript gibi dinamik ve tip koruması olmayan bir dilde yönetilmesi daha da zorlaşacaktır. Bu yüzden script gözüyle bakmantan vazgeçip Javascript’e ciddi bir dil gibi davranıp genel yazılım mühendisliği prensiplerini uygulamak,test yazmak kodun yönetimini kolaylaştıracak diğer prensipleri uygulamak gereklidir.Bu yüzden kodun yönetimini kolaylaştıracak nesneye yönelik programlama teknikleri Javascript içinde oldukça faydalıdır.

Javascript sanılanın aksine Object Oriented programlamayı destekleyen bir programlama dilidir. Klasik anlamda diğer nesneye yönelik programlama dillerinden farkı ise nesneye yönelik programlamayı sınıf tabanlı (class based) değilde , biraz daha farklı olarak object ve prototype tabanlı olarak desteklemesidir. Javascript’in nesneye yönelik programlama tekniklerini birkaç yazıda anlatmayı planlıyorum bu yüzden bu yazıda en basit olarak nasıl nesne tanımlarız onu bakacağız.

Javascript’de basit olarak bir nesneyi aşağıdaki gibi oluşturabiliriz.

var movie = new Object();
movie.name = "Leon";
movie.year = 1995;
movie.rating = 8.5;
movie.displayInfo = function() {
    alert("Movie : " + this.name + " , "+ this.year);
}

movie.displayInfo();

Yukarıda gördüğünüz gibi basit bir şekilde film nesnesi oluşturup gerekli özelliklerine gerekli değerleri atadık.Gördüğünüz gibi herhangi bir “class” tanımı yok. Javascript dinamik bir dil olduğu için herhangi bir zamanda nesneye özellik atayıp çıkarabiliriz.

Yukarıdaki ile aynı işi yapan nesneyi Object Literal notasyonu ile aşağıdaki gibi de tanımlayabiliriz.

var movie = {
    name : "Leon",
    year : 1995,
    rating : 8.5,
    displayInfo : function() {
        alert("Movie : " + this.name + " , "+ this.year);
    }
}

Yukarıda gördüğünüz gibi aynı nesneyi Object Literal notasyonu ile tanımladık.Bunun JSON formatından tanıdık geldiğini düşünüyorum. Daha kısa olduğunu farketmişsinizdir. Javascript gibi her bir byte'ın önemli olduğu bir dilde kısa olması bizler için daha faydalı olacaktır. Yukarıdaki nesne tanımında dikkat edilecek bir nokta da özellik tanımlamalarıdır.Nesnenin özelliklerini aşağıdaki gibi de atayabilirdik.

var movie = {
    "name" : "Leon",
    "year" : 1995,
    "rating" : 8.5,
    "displayInfo" : function() {
        alert("Movie : " + movie.name + " , "+ movie.year);
    }
}

Yukarıdaki gibi Javascript dilinde özellikleri string içerisinde tanımlayıp daha sonra normal özellik gibi ulaşabilirsiniz.Bunun faydası aşağıdaki gibi nesnelere programatik olarak özellik atayıp ya da ulaşabilirsiniz.Yalnızca Object Literal notasyonu programatik özellik tanımlamayı desteklemez bunu aşağıdaki gibi yapabiliriz.

var number =5;
var movie = {
    "name" : "Leon",
    "year" : 1995,
    "rating" : 8.5,
    "displayInfo" : function() {
        alert("Movie : " + movie.name + " , "+ movie.year);
    }
}
movie["writer"+number]="George.." ;

alert(movie["writer"+number]);

Basit olarak nasıl bir nesneye oluşturabileceğimizi gördük. Javascript'de bir işi yapmanın birden fazla yolu olduğu için diğer yöntemleride ileride değinmeyi planlıyorum. Bunları aklınızda tutun ilerlerikçe işler biraz daha karmaşıklaşacak :)

zp8497586rq

Back-End Developer&rsquo;ın Front-End Maceraları

Uzun zamandır gerek iş değişikliği, gerek kişisel projelerden dolayı çok fazla yazma fırsatı bulamadım. Fakat sevindirici tarafı birçok yeni şey öğrendim ve öğrendiklerimi sizlerle paylaşmak beraber öğrenmek, öğretmek için sabırsızlanıyorum.

Gerek yaptığım kişisel projemden gerek işimden dolayı  bolca Javascript ile haşır neşir oluyordum. Bende çoğunlukla benimde herkes gibi yanlış anlaşılan Javascript dilini gerçek anlamda öğrenmeye karar verdim. Açıkçası öğrendikçe daha çok sevdiğimi söyleyebilirim. Benim gibi çoğunlukla Back-End, Server taraflı yazılım geliştiren birisi için oldukça heyecan verici bir yolculuk olduğunu söyleyebilirim. Özellikle klasik anlamda çoğunlukla Java,C# gibi dillerde programlama geliştiren birisi olduğum için Javascript ile Fonksiyonel programlamanın ufkumu açtığını söyleyebilirim.

Bundan sonra Javascript gibi oldukça kolay kontrolden çıkabilen bir dil ile uğraşanlar içinde faydalı olabilecek Object-Oriented Javascript, Javascript Patterns, Performans Optimizasyonu gibi konularda öğrendiklerimi sizlerle paylaşmayı istiyorum. Umarım macerayı sizlerde seversiniz.

zp8497586rq