Javascript.Net ile Javascript Derlemek

  • 7.10.2016
  • tayyipyetis
  • .Net Framework

Herkese yeniden merhaba, bu makalede yine iş hayatından arda kalan boş vaktimde keşfettiğim ve faydalı bulduğum bir konudan bahsedecğim. Javascript yazılım dünyasının çoğu ekolleri tarafından saygıyla karşılaşanan ve adından övgüyle bahsedilen bir betik dili. Brendan Eich tarafından geliştirilmiş ve ilk olarak 1995 yılında Netscape Navigator 2.0 sürümünde piyasaya sürülmüştür. Sözdizimi (Syntax) Java diline benzemesine rağmen kendine özgüdür ve javayla bir ilgisi yoktur isminde "java" geçmesinin sebebi Netscape firmasının java ile tanışma zamanlarına denk gelmesinden kaynaklanır.

Javascript'i güçlü bir dil yapan özellikleri aslında bir programcı için ideal özelliklerdir. dinamik yapıda ve yorumlanan (interpreter) bir dil olduğundan oldukça esnektir ve programcıyı katı kurallara maruz bırakmaz. Bu özelliğinden dolayı üzerine JQuery, AngularJS, BackboneJs gibi bir çok framework inşa edilmiştir. Hatta onun sunucu tarafında da çalışması gerektiğini düşünen Joyent firması NodeJS isminde bir sunucu yazılımı ile sadece javascript yazarak web uygulamaları geliştirme ve yayın yapma imkanı sağlamıştır.

Bu makalenin konusu ise madem javascript bu kadar esnek bir dil peki biz .Net yazanlar bunu bir şekilde uygulama içerisine gömebilir miyiz ? öncelikle böyle bir şeye ihtiyaç var mı yok mu bunu merak edebilirsiniz. Elbetteki genel olarak böyle bir şeye ihtiyaç yok zaten javascript çalıştırmak istiyorsanız bunu sunucu tarafında string bir değer olarak oluşturup tarayıcıya göndererek çalıştırabilirsiniz fakat olay şu ki bir console uygulamasında ya windows uygulamasında javascript'in özelliklerinden faydalanmak istiyorsanız bu işe bir göz atmanızı öneririm. Şimdi örneğimize geçelim. Öncelikle bize yardımcı olacak bir Javascript Engine kütüphanesine ihtiyacımız var bunun için JSIL, SharpKit, Chrome V8 gibi kütüphaneler mevcut fakat biz bu örnekte Javascript.Net kullanacağız CodePlex üzerindeki dökümantasyonu inceleyebilirsiniz. Şimdi bir Visual Studio üzerinde Console Application projesi oluşturun ve kütüphaneyi indirip projeye Add Reference yöntemiyle ekleyin ardından Main fonksiyonu içerisine aşağıdaki komutları yazın.

using Noesis.Javascript;
using(JavascriptContext context = new JavascriptContext()) {
	context.SetParameter("number", 1);
	string script = @"var deg;
                     function test(){
                        deg = 'test başarılı';
                     }                        
                     test();";
	context.Run(script);
	Console.WriteLine(context.GetParameter("deg").ToString());
	Console.WriteLine(context.GetParameter("number").ToString());
}

Sonuç : test başarılı

Yukarıdaki örnekte JavascriptContext sınıfını türetip bir nevi derleyicimizi oluşturuyoruz ardından SetParameter yöntemiyle javascript programımız içerisindeki bir değişkene değer atıyoruz ardından Run komutuyla script'imizi derliyoruz derleme işleminin ardından GetParameter yöntemiyle script içerisindeki bir değişkenin değeri alabiliyoruz bu sadece integer, string tipinde değil array, json gibi formatlarda da olabilir. aşağıdaki örneği inceleyin.

context.SetParameter("number", 1);
string script = @"var deg;
                    function test(){
                       deg = { isim : 'Mustafa', soyisim : 'Yetiş', Numara : '123456'};
                    }                        
                    test();";
context.Run(script);
var deg = context.GetParameter("deg");
foreach(KeyValuePair <string, object> a in ((IEnumerable) deg).Cast <object> ().ToList()) {
	Console.WriteLine(a.Key + " " + a.Value);
}

Sonuç : 

isim Mustafa

soyisim Yetiş

Numara 123456

Bu örnekte javascript değişkenine Json tipinden bir değer verdik ve bunun C# tarafından nasıl kullanılacağını gösterdik. örnekte de görüldüğü gibi GetParameter metodu bize sadece object tipinden sonuç döndürüyor bunu foreach içerisinde kullanabilmek için tipini IEnumerable yapmamız gerekiyor ve her bir Item içinde KeyValuePair olarak tip tanımlamalısınız. Şimdilik başlangıç için bu iki örnek yeterli ileriki makalelerde bu kütüphaneyi kendi projelerimde de kullanırsam örnekleri burada paylaşacağım

Umarım faydalı olmuştur.

Mustafa Tayyip YETİŞ
Yazılım Geliştirme Uzmanı

Yorum Gönder

Diğer Makaleler

Etiketler