Welcome, Guest! Log In | Create Account

Yunus

From yunus

Jump to: navigation, search

Image:YunusProgramlamaDili.jpg

Açık kaynak kod mantığına dayanan, görsel bir programlama dilidir. Delphi programlama dili kullanılarak yapılmıştır. Yazım olarak Visual Basic benzeri betik dile sahiptir.

Tarık Bağrıyanık isimli bilgisayar/bilişim teknolojileri öğretmeni tarafından, Aralık 2001 tarihinde "Delphi 3" ile yapımına başlanmıştır. Yunus projesi "açık kaynak"€ücretsiz script tabanlı programlama dilidir. Aslında eğitim amaçlı basit bir arayüz ile basit komutlar ile "görsel program" yapımı da denilebilir.

24.000 satırdan fazla koddan oluşan projenin yapımı yaklaşık 600 saat sürmüştür. Kod renklendirmesi SynEdit nesnesi ile yapılmıştır.

Kodlamada, Yunus 2.8'e kadarki sürümler için Türkçe ve İngilizce, sonraki sürümler için sadece İngilizce kullanılmıştır. Programın arayüz kullanımı ise Türkçe ve İngilizce desteğine sahiptir.

XML veritabanı dosya türü ve Excel tabloları da desteklenmektedir. Exe yapımı, ASP-PHP çıktı verebilme (ki şu anda basit de olsa HTML çıktısı var), pic (mikrokontrolcü) programlama ve oyun programlama (yapay zeka) gibi alanlarda Yunus'u geliştirilebilir. SQL komutları ile istenen tabloda sorgu yapma şimdilik yoktur.

Kod kısmında genelde Basic benzeri bir dildir. C++ ve Pascal 'dan esintiler var.

Yunus projesi kodları, Delphi 7 ve sonraki sürümlerinde gerekli nesneler kurulduktan sonra güncellenmesi imkanı var. Delphi 2007'de aynı şekilde gerekli nesneler (SynEdit) kurulunca problemsiz olarak geliştirilmeye devam edilebilir.

Bilgisayardaki portlara erişmek (paralel port gibi), Excel dosyalarına erişip değişikliği kaydedebilme, XML (*.cds) olarak veritabanı kullanabilme gibi özellikleri var. Yunus projelerinde form yüzeyi çizim alanı olarak kullanılabilir. Timer (zamanlayıcı) nesnesi ile basit animasyonlar yapılabilir.

Yunus projesinde yapılan programların çalışma zamanlarında değişkenlerinin izlenmesi kolaydır. İstenirse değerleri değiştirilebilir. Değişkenler "kalıcı" hale getirilerek bir sonraki çalışmada da aktif olarak kullanılabilirler.

Microsoft Access veritabanı programındaki gibi bir nesne sağ tıklanıp başka bir nesneye dönüştürülebilir. Mesela bir düğme istenirse etikete dönüştürülebilir. Ama tabii ki ona bağlı olan "tiklanınca" olayı hala çalışır haldedir. Zaten çoğu nesnenin ortak bir olayı olan "tiklanınca" istenen nesneye bağlanabilir. Kod kısmında açılan prosedürün adını nesne adı ile değiştirmek yeterlidir.

Değişkenler global ve istenen yerde oluşturulabilir. Değişken türleri yoktur. Otomatik olarak sayı ve metin dönüşümleri yapılıyor. Fonksiyon dönüş değeri ve gönderme parametresine bu sebeple ihtiyaç duyulmaz. Aslında yeni yapılan "function"€ bildiğimiz parametresiz alt programdır.


Programcıdan Not:

Eksiler ve Artılar: Tüm programlama komutları daha bitmedi. Sadece basit atama, nesne özelliklerine erişme var. Türkçe/İngilizce menü, kayıt, yazıcı çıktısı, yorumlama, renkli kod yazımı, otomatik tamamlama, XML veritabanı, ExcelTablo gibi basit özellikler bulunuyor. Her yeni programda Yunus'un kendi menüleri dahil komutlar da özelleştirilebilir. Yunus Programı çalıştırıldığında Windows Gezgini'nden *.proje dosyaları kayıtlı hale geliyor. Dışarıdan Yunus'un ana penceresine *.proje dosyaları sürüklenip açılabilir. Basit bir şekilde EXE (eğer Delphi 6'nız kurulu ise) yapılabiliyor ve HTML olarak da dönüşüm yapılabiliyor. Delphi 6 sürümü oluşan *.dpr dosyayı açabiliyor. Hata mesajları penceresi daha bitmedi.

Çoğunlukla Visual Basic benzeri kodlama sistemimiz var. Aslında hoşuma giden Pascal ve C++ komutları da ekledim. Sonuçta Türkçe veya başka bir dilde özelleştirilebilen basit bir eğitim amaçlı script dilimiz var. "Examples" klasörü içindeki örnekleri inceleyerek genel kullanım hakkında bilgi alabilirsiniz.

Kodlama ile ilgili birkaç ipucu şunlardır:

  • Değişken türleri ve tanımlanması yoktur. Tüm değişkenler globaldir. Değişken adlarında sayı ile başlamak ve özel karakter kullanmak, boşluk bırakmak sorun çıkarmasa da tavsiye edilmez. Kullanıcı hatayı bilerek oluşturduğu kabul ediliyor.
  • Sayı (tamsayı ve gerçek), metin ve mantıksal (True - Evet, False - Hayir) kendiliğinden dönüştürülüyor. 1E3 rakamı 1000 anlamında kullanılabilir. Gerçek sayılarda "," virgül ile ondalık basamak ayrılabilir.
  • "=" ile atama ve karşılaştırma, satır sonlarında ";" yoktur. Aynı satıra ";" kullanarak daha çok komut yazmayı düşünüyorum.
  • "+", "-", "*", "/", "&" (metin birleştirme), "^" (exp - üs alma), “\” (div - tam bölüm), "%" (mod - kalan), "@" (mantıksal ve), "~" (mantıksal veya) hesaplama bağlacıdır. İçiçe hesap ve parantez kullanılabiliyor.
  • Değişken ve nesne özelliklerinden sonra "++" ve "--" ile artım eksiltme yapılabilir. a++ gibi, fakat şimdilik ++a yoktur. a++ deyimi a=a+1'den biraz hızlı işler.
  • Birleştirici hesaplamalar a+=2 (eşiti a=a+2) gibi tüm işlemler (+, -, *, /, ^, %, &, \, @, ~) için kullanılabilir. a+ =1 gibi işlem ve eşittir arasına boşluk bırakmayınız.
  • Hesap yönü soldan sağadır. Çarpma ve bölme önceliği yoktur. Bu gibi durumlarda parantez kullanılabilir.
 a=5+6*3-2 ==> a=21 

//normalde; * (çarpma) önce yapılır, sonra da kalan yapılır.

 a=5+6*3-2 ==> a=31 

//Yunus'da; 5+6, sonra 11*3, sonra 33-2... parantez ile a=5+(6*3)-2 asıl sonuç çıktığı görülebilir.

  • sin(gerçek), cos(gerçek), random(tamsayı), int(gerçek), not(mantıksal), len(metin), lower(metin), upper(metin), chr(tamsayı), asc(karakter), delete(metin, ilk, miktar), mid(metin, ilk, miktar), pos(metin, karakter), and(tamsayı, tamsayı), or(tamsayı, tamsayı), xor(tamsayı, tamsayı), shr(tamsayı, miktar), shl(tamsayı, miktar), time() ve date() fonksiyonlarını kod kısmında kullanabilirsiniz. Bu komutları özelleştirme penceresinde bulamazsınız.
  • Metinleri " işareti içine almak gerekebilir. Mantıksal değer olan "Evet" ve "Hayir" çift tırnak içine alınmalıdır.
  • Büyük küçük harf ayrımı yoktur. Komutlar, nesne özellikleri ve değişkenler istenilen büyüklükte karışık yazılabilir.
  • Eger komutu tek veya çok şartlı olarak kullanılabilir. Şart kısmında AND için "@" ve OR için de "~" gibi bağlaçları destekliyor.
  • Eger komutunda "=" ">" "<" "<>" "<=" ">=" kullanılabilir. İçiçe Eger (Degilse) kullanımı sorun çıkarmaz.
  • eEger şart, dogruSatir, yanlisSatir VB dilindeki iif gibidir. İç kısımlarda bloklu komutlar kullanılamaz.
  • Donder degiskenAdi=BaslangicDegeri, BitisDegeri, Artim şeklinde içiçe kullanabileceğimiz döngü komutumuz var.
  • iken Şart şeklinde sonuç "Yanlış" olana dek dönen komut vardır. ikenBitti ile de bittiği belirtilir.
  • Kullanıcı kendi Fonksiyon'unu tanımlanabiliyor.
  • "//" açıklama satırı yapar. Satır içi açıklama satırı yapılabiliyor.
  • Etiket tanımlaması ile istenen satıra Git komutu ile dallanabilme imkanı vardır.
  • Deyimler arasına boşluk ve TAB yapılabilir. Fakat Git komutunun etiketi ":" ile bitişik olması gereklidir.
  • Yuzey komutu ile form üzerine metin, cizgi, nokta, dikdortgen (kare), daire (elips), poligon yapılabilir. Fakat form üzerinden bir şeyler geçtiğinde silindiğini görebilirsiniz. Tazele komutu ile de formu temizleyebilirsiniz.
  • sesCal dosyaadi ile *.wav müzik dosyaları çalınabilir.
  • Tablo nesnesi ile *.xml (Extensible Markup Language) ve *.cds (Client Data Set) dosyalarına erişip basit kayıtlar oluşturabilirsiniz. Şimdilik SQL (Structured Query Language) ve tablo tasarım penceresi (kısayolu: Ctrl+D) bitmedi.
  • ExcelTablosu nesnesi ile Excel dosyalarına ulaşabilir, istenen hücrenin değeri alınabilir, değiştirilebilir, sonrada kaydedilebilir. Yeni dosya oluşturma yoktur.
  • BenchmarkStart ve BenchmarkEnd kodları arası milisaniye olarak hız ölçümü verir. Sonuç Hata Penceresi'ne eklenir.
  • komut tekSatirKomut ile Yunus'un tek satirlik kendi komutlarını kullanabilirsiniz.

Mesela; komut a=1

  • inport(adres) ve outport(adres, byteDeger) donanım olarak port kullanımı içindir.

Örneğin; 888 (378 onaltılık) adresi yazıcının veri portu olarak kullanılır.

  • Nesnelere atanabilen olay adları vardır. Form ilk açılış ayarları için "Yuklenince - OnLoad"€, kapanirken de "Kapanirken - OnClose" olayları oluşturulabilir.

Hedeflenenler:

  • Case - Durum komutu
  • Dinamik Nesne oluşturma
  • Daha iyi nesne seçimi ve nesne boyutlandırma
  • Nesne ve değişken dizileri
  • Tam olarak çalışan Birden fazla Form kullanma
  • Daha geniş Yardım Konuları
  • EXE ve HTML oluştururken tüm nesnelerin komutları ile birlikte çalışabilmeleri




Türkçe kod örneği


 Form Yuklenince  
  Etiket1.baslik=0
  a=0
  b=0
  islem = "a"
  eski_ust=form.ust
  eski_sol=Form.sol
  form.ust=200
  form.sol=400
 bitti      
 Form kapanirken  
  form.ust=eski_ust
  form.sol=eski_sol
 bitti     

 Dugme1 Tiklaninca
  a=0
  b=0
  islem="a"
  Etiket1.baslik="0"
 bitti  
 Dugme2 Tiklaninca
  eeger Etiket1.baslik=0,Etiket1.baslik="", Etiket1.baslik&="0"
 bitti


Image:YunusOrnek.JPG


Dış Bağlantılar