T.C.
SÜLEYMAN DEMİREL ÜNİVERSİTESİ FEN BİLİMLERİ ENSTİTÜSÜ
MOBİL CİHAZLAR İÇİN HER ORTAMA UYUMLU TÜRKÇE PROGRAMLAMA DİLİ GELİŞTİRMESİ
İbrahim KURU
Danışman Doç. Dr. Okan BİNGÖL
YÜKSEK LİSANS TEZİ ELEKTRONİK - BİLGİSAYAR EĞİTİMİ ANABİLİM DALI
ISPARTA - 2016
©2016 [İbrahim KURU]
i
İÇİNDEKİLER
Sayfa
İÇİNDEKİLER ..................................................................................................................................... i
ÖZET ................................................................................................................................................... iv
ABSTRACT ......................................................................................................................................... v
TEŞEKKÜR ........................................................................................................................................ vi
ŞEKİLLER DİZİNİ .......................................................................................................................... vii
ÇİZELGELER DİZİNİ ...................................................................................................................... ix
SİMGELER VE KISALTMALAR DİZİNİ ..................................................................................... x
1. GİRİŞ .............................................................................................................................................. 1
2. KAYNAK ÖZETLERİ .................................................................................................................. 4
3. MATERYAL VE YÖNTEM ......................................................................................................... 8
3.1. Programlama Dilleri ......................................................................................................... 8
3.2. Platform ................................................................................................................................. 8
3.2.1. PhoneGap ...................................................................................................................... 9
3.2.2. Rhodes ............................................................................................................................ 9
3.2.3. MoSync ........................................................................................................................ 10
3.2.4. Marmalade ................................................................................................................. 10
3.2.5. JQuery Mobile ........................................................................................................... 10
3.2.6. XMLVM ........................................................................................................................ 10
3.2.7. Xamarin ....................................................................................................................... 11
3.2.8. Sencha Touch ............................................................................................................ 11
4. UYGULAMA VE ARAŞTIRMA BULGULARI................................................................. 12
4.1. Bukalemun Programlama Dili ............................................................................... 12
4.1.1. Bukalemun dili dosya uzantıları ....................................................................... 12
4.2. Bukalemun Kodlarının Derlenmesi ......................................................................... 13
4.2.1. Bukalemun derleyici komut satırı parametreleri ....................................... 14
4.3. Bukalemun Kodlama Ortamı ...................................................................................... 14
4.3.1. Bukalemun framework editör ........................................................................... 14
4.3.2. BFE ile kaynak kod derleme ............................................................................... 15
4.4. Bukalemun Kodlarının Hayat Döngüsü .................................................................. 17
4.5. Bukalemun Dili Anahtar Kelimeleri ......................................................................... 19
ii
4.6. Derleyici .............................................................................................................................. 19
4.7. Kelime Analizi .............................................................................................................. 20
4.8. Söz Dizimsel Analiz .................................................................................................... 22
4.8.1. Değişken tanımlamanın söz dizimsel analizi ............................................... 22
4.9. Shunting Yard Algoritması Analizi ....................................................................... 24
4.10. Yorumlayıcı ..................................................................................................................... 26
4.10.1. Yorumlanan dillerin özellikleri ....................................................................... 27
4.10.2. Bukalemun dili yorumlayıcıları ...................................................................... 27
4.11. Bukalemun Dili Kodlaması ....................................................................................... 27
4.12. Değişkenler ................................................................................................................. 27
4.12.1. Değişken türleri .................................................................................................... 28
4.12.2. Değişkenlerin Geçerlilik Alanları ................................................................... 28
4.12.3. Değişkenlere değer atama ................................................................................ 29
4.12.4. Değişkenlere klavyeden değer atama........................................................... 30
4.12.5. Değişkenlere değer atarken oluşabilecek hatalar ................................... 31
4.12.6. Değişkenlerin değerlerini ekrana yazdırma .............................................. 32
4.12.7. Önceden tanımlı değişkenler ........................................................................... 33
4.12.7.1. platform değişkeni ............................................................................................ 33
4.12.7.2. uygulamadosyası değişkeni ........................................................................... 35
4.13. Açıklama Satırları ..................................................................................................... 35
4.14. Operatörler ................................................................................................................. 36
4.15. Kontrol İfadeleri ....................................................................................................... 38
4.15.1. eğer ............................................................................................................................ 38
4.15.2. değilse ....................................................................................................................... 39
4.15.3. eğer - değilse eğer ................................................................................................ 39
4.15.4. İç içe eğer ................................................................................................................. 40
4.16. Döngü deyimleri ....................................................................................................... 41
4.16.1. say döngüsü ............................................................................................................ 41
4.16.2. İç içe say döngüsü................................................................................................. 42
4.16.3. tekrarla Döngüsü .................................................................................................. 42
4.16.4. bitir, devam anahtar kelimeleri ...................................................................... 43
4.17. Fonksiyonlar .............................................................................................................. 43
4.17.1. Geriye değer döndüren fonksiyonlar............................................................ 44
iii
4.17.2. Dahili fonksiyonlar............................................................................................... 44
4.17.3. Tür dönüştürme fonksiyonları ........................................................................ 45
4.17.4. Form uygulamalarına özel fonksiyonlar ..................................................... 46
4.18. Form Uygulamaları .................................................................................................. 46
4.18.1. oluştur Fonksiyonu .............................................................................................. 46
4.18.2. değiştir Fonksiyonu ............................................................................................. 47
4.18.3. özellik Fonksiyonu ............................................................................................... 48
5. ARAŞTIRMA BULGULARI ..................................................................................................... 49
5.1. Cümle Analizi .................................................................................................................... 49
5.2. İstenilen Aralıkta Rastgele Sayı Üreten Program ............................................... 51
5.3. Girilen Sayıyı Üçerli Ayırarak Yazan Program ..................................................... 53
5.4. Sayı Tahmin Oyunu ........................................................................................................ 55
5.5. Sayısal Loto Programı ................................................................................................... 57
5.6. XOX Oyunu ......................................................................................................................... 59
5.7. Hesap Makinesi ................................................................................................................ 61
6. SONUÇ VE ÖNERİLER ............................................................................................................ 63
KAYNAKLAR .................................................................................................................................. 64
ÖZGEÇMİŞ ....................................................................................................................................... 67
EK 1 - Cümle Analizi Programı Kodları ............................................................................... 68
EK 2 - Rastgele Sayı Üreten Program Kodları ................................................................... 70
EK 3 - Girilen Parayı 3'er Ayırarak Yazan Program Kodları ....................................... 72
EK 4 - Sayı Tahmin Oyunu Kodları ........................................................................................ 74
EK 5 - Sayısal Loto Kodları ....................................................................................................... 76
EK 6 - XOX Oyunu Kodları ........................................................................................................ 78
EK 7 - Bukalemun Hesap Makinesi Programı Kodları ................................................... 83
iv
ÖZET
Yüksek Lisans Tezi
MOBİL CİHAZLAR İÇİN HER ORTAMA UYUMLU TÜRKÇE PROGRAMLAMA
DİLİ GELİŞTİRMESİ
İbrahim KURU
Süleyman Demirel Üniversitesi Fen Bilimleri Enstitüsü
Elektronik - Bilgisayar Eğitimi Anabilim Dalı
Danışman: Doç. Dr. Okan BİNGÖL
Teknolojinin hızlı gelişimine paralel olarak, bilgisayarlar ve bilgisayar üzerinde çalışan uygulamalar hayatımızın her alanına girmiş durumdadır. Bu durum, yazılım eğitiminin önemini de artırmıştır. Gençlere erken yaşlarda verilecek yazılım eğitimi ile, hem yazılıma olan ilgi artırılmış olacak hem de ileride bu alanda yetişmiş insan gücünün oluşmasına katkı sağlanacaktır. Günümüzde uygulama geliştirmek amacı ile birçok programlama dili mevcuttur. Bu kadar çok programlama dili olmasına rağmen, yazılım eğitiminin ilk aşamalarında türkçe kodlanabilen bir programlama dilinin kullanılması öğrencilerin öğrenmesine büyük katkı sağlayacaktır. Kullanılacak programlama dilinin seçiminde, geliştirilen uygulamanın her platformda herhangi bir değişikliğe gerek kalmadan çalıştırılabilecek olması da önemli bir etkendir. Bu tez çalışmasında, platformdan bağımsız olarak çalışan uygulama geliştirebilmek için; yüksek seviyeli, Türkçe kodlanabilen Bukalemun adında yeni bir programlama dili geliştirilmiştir. Yazılan kodların ortak bir dile çevrilmesi için kodlaması Delphi ile yapılan bir derleyici yazılmıştır. Kodların yorumlanması için ise, Windowsta konsol ve form uygulamaları için Delphi dili ile 2 farklı yorumlayıcı, Android uygulamaları için JAVA ile android yorumlayıcı, IOS uygulamaları için Objective – C ile IOS yorumlayıcı yazılmıştır. Anahtar Kelimeler:Platform Bağımsız Uygulama, Mobil Cihaz Uygulamaları, Windows Uygulamaları, Türkçe Programlama Dili. 2016, 86 sayfa
v
ABSTRACT
M. Sc. Thesis
TURKISH PROGRAMMING LANGUAGE DEVELOPMENT FOR MOBILE
DEVICES THAT COMPATIBLE FOR ALL PLATFORMS
İbrahim KURU
Süleyman Demirel University Graduate School of Applied and Natural Sciences
Department of Electronic Computer Education
Supervisor: Assoc. Prof. Dr. Okan BİNGÖL Parallel to rapid development of technology, computers and applications running on the computer has already entered into every area of our lives. In this case, what has increased the importance of software training. Young people will be given at an early age with software training, both will be increased interest in both software in the future will contribute to the formation of trained manpower in this field. Today, with the aim of developing the application it is available in several programming languages. Although there are so many programming languages, in the initial stages of software training to use a programming language that can be encoded Turkish will contribute greatly to the students' learning. The selection of the programming language to be used, have developed applications that can run on any platform without any modification is also an important factor. In this thesis, to develop a cross platform application, a new high level programming language coded Turkish keywords and named Bukalemun is developed. To compile the written codes into a common language, a new compiler was written in Delphi. To interpret the codes, for console and form applications of windows, two interpreters were written in Delphi and for Android applications Android Interpreter was written in Java, for IOS applications an IOS Interpreter was written in Objective-C. Keywords: Cross Platform Application, Mobile Application, Windows Application, Turkish Programming Language. 2016, 86 pages
vi
TEŞEKKÜR
Bu araştırma için beni yönlendiren, karşılaştığım zorlukları bilgi ve tecrübesi ile aşmamda yardımcı olan değerli Danışman Hocam Doç. Dr. Okan BİNGÖL’e teşekkürlerimi sunarım. Çalışmam süresince bilgi ve tecrübesiyle yardımlarını esirgemeyen değerli hocam Doç. Dr. Ecir Uğur KÜÇÜKSİLLE'ye teşekkür ederim. Tezimin araştırma aşamasında yazdığı uygulama ve notlar ile beni yönlendiren Talha Zekeriya DURMUŞ'a teşekkür ederim. Tezimin her aşamasında beni yalnız bırakmayan aileme, eşime sonsuz sevgi ve saygılarımı sunarım.
İbrahim KURU
ISPARTA, 2016
vii
ŞEKİLLER DİZİNİ
Sayfa
Şekil 3.1. Uygulama - Platform arası ilişki ............................................................................. 9
Şekil 3.2. XMLVM Mimarisi ...................................................................................................... 11
Şekil 4.1. Bukalemun ile ilk örnek ......................................................................................... 12
Şekil 4.2. Bukalemun ile ilk örneğin ekran görüntüsü .................................................. 12
Şekil 4.3. Bukalemun Framework Editör ........................................................................... 15
Şekil 4.4. BFE ile kod derleme ................................................................................................. 16
Şekil 4.5. Derlenen kodların ortak dil karşılığı (Okunabilir) ...................................... 16
Şekil 4.6. Derlenen kodların hex karşılığı ........................................................................... 17
Şekil 4.7. Bukalemun kodlarının derlenme - yorumlanma adımları ....................... 18
Şekil 4.8. Örnek bir program satırı ....................................................................................... 20
Şekil 4.9. Assembly dili kod karşılığı .................................................................................... 20
Şekil 4.10. Toplama işlemi örnek kod satırı ...................................................................... 21
Şekil 4.11. Hatalı değişken tanımlaması yapılan örnek ................................................ 23
Şekil 4.12. Hatalı değişken tanımlaması örneği için derleyici ekran görüntüsü . 24
Şekil 4.13. Infix ifadesi ............................................................................................................... 25
Şekil 4.14. Postfix ifadesi .......................................................................................................... 25
Şekil 4.15. Söz dizimsel analiz sonucu oluşan postfix ifadesi ..................................... 26
Şekil 4.16. Değişken tanımlama ............................................................................................. 28
Şekil 4.17. Değişkenlerin geçerlilik alanlarını gösteren örnek .................................. 29
Şekil 4.18. Değişkenlere değer atama .................................................................................. 30
Şekil 4.19. Metin türündeki değişkene klavyeden değer atama ................................ 30
Şekil 4.20. Metin türünden sayı türüne dönüşüm yaparak atama............................ 31
Şekil 4.21. Hatalı tür dönüşüm örneği ................................................................................. 31
Şekil 4.22. Hatalı tür dönüşümde karşılaşılan hata mesajı.......................................... 32
Şekil 4.23. Değişken değerini konsol ekranına yazdırma ............................................ 32
Şekil 4.24. Değişken değerini ekrana yazdırma örneği ekran görüntüsü .............. 33
Şekil 4.25. Uygulamanın çalıştığı platform bilgisini gösteren program ................. 34
Şekil 4.26. Konsol uygulamalarında platform değişkeni .............................................. 34
Şekil 4.27. Windows Form uygulamalarında platform değişkeni ............................. 34
Şekil 4.28. Android ve IOS platformları için platform değişkeni ............................... 35
Şekil 4.29. Aritmetiksel operatörlerin tamamının kullanıldığı bir uygulama ...... 37
Şekil 4.30. Aritmetik operatörler örneği ekran görüntüsü.......................................... 38
Şekil 4.31. Eğer ifadesi kullanımı ........................................................................................... 38
Şekil 4.32. eğer - değilse ifadesi kullanımı ......................................................................... 39
Şekil 4.33. eğer - değilse - eğer ifadesi kullanımı ............................................................ 40
Şekil 4.34. İç içe eğer ifadesi kullanımı................................................................................ 40
Şekil 4.35. say döngüsü kullanımı ......................................................................................... 41
Şekil 4.36. İç içe say döngüsü kullanımı .............................................................................. 42
Şekil 4.37. Tekrarla döngüsü kullanımı - 1 ........................................................................ 42
Şekil 4.38. Tekrarla döngüsü kullanımı - 2 ........................................................................ 43
viii
Şekil 4.39. Fonksiyon tanımlama ........................................................................................... 43
Şekil 4.40. Geriye değer döndüren fonksiyon örneği .................................................... 44
Şekil 4.41. Otomatik olarak yapılan tür dönüşüm işlemi ............................................. 45
Şekil 4.42. Tür dönüşümü ......................................................................................................... 45
Şekil 4.43. Değiştir fonksiyonu kullanımı........................................................................... 47
Şekil 4.44. Özellik fonksiyonu kullanımı ............................................................................. 48
Şekil 5.1. Cümle analizi örneği için windows form ekran görüntüsü ...................... 49
Şekil 5.2. Cümle analizi örneğinin Android ve IOS için ekran görüntüsü .............. 50
Şekil 5.3. Rastgele sayı üreten programın windows ekran görüntüsü ................... 51
Şekil 5.4. Rastgele sayı üreten programın Android ve IOS ortamlarındaki ekran
görüntüleri.................................................................................................................. 52
Şekil 5.5. Sayıyı üçerli ayırarak yazan program windows ekran görüntüsü ........ 53
Şekil 5.6. Girilen sayıyı para birimine çevirerek 3'erli ayıran program için
Android ve IOS ekran görüntüleri ..................................................................... 54
Şekil 5.7. Sayı tahmin oyunu windows ekran görüntüsü ............................................. 55
Şekil 5.8. Sayı tahmin oyunu Android ve IOS ekran görüntüsü ................................. 56
Şekil 5.9. Sayısal loto programı windows ekran görüntüsü ........................................ 57
Şekil 5.10. Sayısal loto programı Android ve IOS ekran görüntüleri ....................... 58
Şekil 5.11. XOX oyunu windows ekran görüntüsü .......................................................... 59
Şekil 5.12. XOX oyunu Android ve IOS ekran görüntüleri............................................ 60
Şekil 5.13. Hesap makinesi programı için windows ekran görüntüsü.................... 61
Şekil 5.14. Hesap makinesi programı için Android ve IOS ekran görüntüsü........ 62
ix
ÇİZELGELER DİZİNİ
Sayfa
Çizelge 1.1. Native, Hibrid ve Web uygulamalarının özellikleri .................................. 2
Çizelge 1.2. Geliştirme tiplerinin karşılaştırılması ........................................................... 2
Çizelge 4.1. Bukalemun dili dosya uzantıları .................................................................... 13
Çizelge 4.2. Derleyici parametreleri ..................................................................................... 14
Çizelge 4.3. Bukalemun dili anahtar kelimeleri ............................................................... 19
Çizelge 4.4. Toplama işlemi örnek kod satırına göre oluşturulan belirtkeler ...... 22
Çizelge 4.5. Kod satırına karşılık beklenen belirtkeler ................................................. 23
Çizelge 4.6. Değişken tanımlama örnekleri ....................................................................... 28
Çizelge 4.7. Değişkenlerin bellekte kapladığı alan .......................................................... 28
Çizelge 4.8. Platform değişkeninin alabileceği değerler ............................................... 33
Çizelge 4.9. Açıklama satırları ................................................................................................. 36
Çizelge 4.10. Bukalemun dili operatörleri ......................................................................... 36
Çizelge 4.11 Say döngüsü parametreleri ............................................................................ 41
Çizelge 4.12. Bukalemun dahili fonksiyonları .................................................................. 44
Çizelge 4.13. Form uygulamalarına özgü fonksiyonlar ................................................. 46
Çizelge 4.14. Form elemanı oluşturma ................................................................................ 46
Çizelge 4.15. Oluştur fonksiyonu parametreleri .............................................................. 47
Çizelge 4.16. Değiştir fonksiyonu parametreleri ............................................................. 47
Çizelge 4.17. Form kontrollerinde kullanılabilen özellikler ....................................... 47
x
SİMGELER VE KISALTMALAR DİZİNİ
Kısaltma Açıklaması
BFD Bukalemun Framework Derleyici BFE Bukalemun Framework Editör buk Bukalemun kaynak kod dosyası ale Bukalemun proje dosyası mun Bukalemun konsol uygulaması munf Bukalemun form uygulaması JVM Java Sanal Makinesi (Java Virtual Machine) SDK Yazılım geliştirme kiti (Software Development Kit) HTML Hiper Metin İşaretleme Dili (Hyper Text Markup Language)
1
1. GİRİŞ
Teknoloji sözcüğünün kökeni eski Yunanca’daki “tekhne” (sanat, zenaat) ve
“logos” (söz, sözcük) terimlerinin bileşiminden oluşmuştur. Bilimin insanın
pratik yaşam gereksinimlerinin karşılanmasına veya çevresini denetleme,
biçimlendirme ve değiştirme çabalarına yönelik uygulamaları anlamına
gelmektedir (Özözer vd., 2010).
Teknoloji, hayatımızın her alanını kapsama alanı içine almıştır. Akıllı
telefonların yaygınlaşmasıyla birlikte sabit telefonların kullanımının azalması,
gezdiğimiz gördüğümüz ortamları fotoğraf karesine almamızla fotoğraf
makinelerinin fazla kullanılmaması, kameranın yalnız işi olanlar tarafından ele
alınması, radyo, tv, internet için dahi akıllı telefonların kullanılması bu
telefonların hayatımızın büyük bir bölümünde yeri olduğunu gösterir (Bilgiler
Sitesi, 2012).
Akıllı telefonlar günlük yaşamın ayrılmaz bir parçasıdır. Zamanla kullanıcılar
daha kısa sürede farklı platformlarda çalışabilen uygulamalar beklemektedirler.
Bu, müşterilerin beklentilerini karşılayacak rekabetçi pazarda yüksek
performanslı mobil uygulamalar geliştirmek için büyük bir sorundur. Kısa
sürede platformdan bağımsız bir şekilde çalışabilen yeni uygulamaların
geliştirilmesi oldukça büyük bir sorun olmasına rağmen, çapraz platform
uygulama geliştirme araçları büyük ölçüde bu sorunu çözmektedir (Palmieri,
2012).
Platform, uygulamaların çalıştırıldığı ortam olarak tanımlanabilir. Bu ortam her
cihaza özgü olduğu için, hazırlanan uygulamaların farklı platformlarda
çalıştırılması normal şartlarda mümkün değildir. Bir uygulamanın her
platformda çalışabilmesi için, uygulamanın yazıldığı dili her platformun bilmesi
gerekir. Her platformun kendi diliyle yazılmış uygulamalarına doğal (native
apps) uygulamalar denir.
2
Platform bağımlılığı sorununu çözmek için, farklı yöntemlerle geliştirilmiş
araçlar vardır. Bunlardan bazıları web teknolojilerini (html5, javascript…)
kullanarak, bazıları ise C++ gibi bir dil ile geliştirilerek hedef platforma uyumlu
hale getirilmektedir.
Mobil uygulama geliştirmek için üç yol vardır. Bunlar Native Apps, Web Apps ve
Hybrid Apps'tır. Native Apps, platformun doğal dili ile hazırlanan
uygulamalardır. Donanıma ve sistem API'lerine erişim sağlayabilir. Performansı
yüksektir. Ancak, platforma özgü olduğu için farklı platformlarda
çalıştırılamazlar. Web Apps, web teknolojileri kullanılarak oluşturulan
uygulamalardır. Donanımı tamamen kontrol edemez. Hybrid Apps ise, native
uygulamalara web teknolojilerinin gömülmesiyle oluşturulan uygulamalardır.
Bu üç yöntemden hangisinin tercih edilebileceği, hazırlanacak olan uygulamanın
ihtiyaçlarına göre belirlenmelidir (Eğitim Takvimi, 2016).
Native, Web, Hibrid tercihinde Çizelge1.1'deki özellikler ve Çizelge 1.2'deki
karşılaştırmalar göz önüne alınmalıdır.
Çizelge 1.1. Native, Hibrid ve Web uygulamalarının özellikleri (Eğitim Takvimi, 2016)
Özellik Native Hibrid Web
Cihaz Özelliklerine Erişim Tam Kısmi Kısmi Çevrimdışı (offline) Çalışma Var Yok Yok Hız Yüksek Düşük Düşük Güncelleme Zor Kolay Kolay Platformdan Bağımsızlık Yok Var Var Geliştirme Maliyeti Yüksek Düşük Düşük Güçlü Grafiksel İhtiyaçlar Yüksek Düşük Düşük
Çizelge 1.2. Geliştirme tiplerinin karşılaştırılması (Karlı, 2014)
Özellik Native Uygulamalar
Hybrid Uygulamalar
Web Uygulamaları
Geliştirme Dilleri Sadece Native
Native ve web ya da sadece web
Sadece web
Kod taşınabilirliği Yok Yüksek Yüksek Cihaz özelliklerine erişim Yüksek Orta Düşük
Gelişmiş grafikler Yüksek Orta Orta Güncelleştirme esnekliği Düşük Orta Yüksek
Kurulum deneyimi Yüksek Yüksek Orta
3
Bu çalışmada, Türkçe kodlama yapısı ile platformdan bağımsız olarak
çalışabilen "Bukalemun" adında yeni bir programlama dili oluşturulmuştur.
Oluşturulan dilin derleyicisi Delphi, yorumlayıcılar ise Android için Java, IOS için
Objective-C, Windows için Delphi programlama dilleri ile yazılmıştır. Böylece
derlendikten sonra Windows, IOS ve Android ortamlarında çalışabilen bir
programlama dili geliştirilmiştir.
4
2. KAYNAK ÖZETLERİ
Küçük (2008) tarafından yapılan çalışmanın temel amacı, farklı programlama
dili geçmişi olan programcıların programlama alışkanlıklarını değiştirmeden
kod üretmeleridir. Bu maksatla yeni bir programlama dili altyapısı olan Cezve
tasarlanmış ve oluşturulmuştur. Cezve, özelleştirilebilir programlama dillerine
ev sahipliği yapmak için tasarlanmıştır. Java Sanal Makinesi (JVM) üzerinde
koşan dil alt yapısı, programcıların istekleri doğrultusunda
özelleştirilebilmektedir. Cezve kullanıcıları, kendi dillerini tasarlayabilir ve
programlama alışkanlıklarını değiştirmeden tasarladıkları dili kullanabilirler.
Cezve, bütünleşik bir ağaç ayrıştırıcı ve birçok yönetici sınıfı içermektedir. Dil
altyapısının desteklediği ağaç yapısı gözetilerek, var olan Programlama Dilleri
özelleştirilebilir veya baştan yeni bir Programlama Dili oluşturulabilir. Çalışma
süresince dil özelleştirme mekanizmasını göstermek için, Javy adında örnek bir
programlama dili oluşturulmuştur. Dil altyapısının çalışma mekanizmasını
göstermek adına, örnek bir Programlama Dili oluşturulmuştur. JavaScript,
Python, Ruby, Perl gibi dillerin bazı güzel özellikleri Javy'ye eklenmiştir.
Ribeiro ve Silva (2012), platform bağımsız uygulama dilleri ile ilgili bir inceleme
yapmışlardır. Günümüzde mobil uygulamalar, insanların akıllı telefonlar, tablet
ya da eşdeğer cihazların kullanımı ile çeşitli görevleri gerçekleştirmek için
hazırlanan uygulamalar, günlük hayatımızda giderek ayrılmaz bir parçası haline
gelmektedir. Farklı mobil işletim sistemlerinin farklı programlama dilleri ve
geliştirme araçlarıyla var olması, birinin bir uygulamayı tüm platformlarda
çalışacak şekilde yayınlamayı istediğinde problem olacaktır. Bu tipik yaklaşımda
her platform için uygulamanın yeniden yazılması büyük bir çaba, bütçe ve
zaman gerektirir. Bu nedenle, uygulamanın genel kalitesinden ödün vermeden
çeşitli platformlarda çalışabilecek bir çözüm uygulaması pazarlama süresini
azaltacak ve muazzam potansiyel kullanıcı sayısını artıracaktır. Son zamanlarda
platform bağımsız uygulama geliştirmeyi kolaylaştıracak frameworklerin ortaya
çıkması bu sorunu çözmek içindir.
5
Guangtai vd. (2014) çalışmalarında platforma özel uygulama geliştirme dilleri
(Android için Java, IOS için Objective-C) ile platform bağımsız uygulama
geliştirme araçları (JavaScript) karşılaştırmışlardır. Mobil uygulama
geliştiriciler mobil platform çeşitliliğinden dolayı birçok zorluk çekerler (Yeni
platform için kodların yeniden yazılması gerektiği gibi). Platform bağımsız
uygulama geliştirme araçları bir kere yaz farklı platformlarda çalıştır
prensibiyle mobil uygulama geliştirme maliyetini düşürmektedir. Bu platform
bağımsız uygulama geliştirme araçları aygıtın doğal bileşenlerini kullanmak için
genellikle programcıya bir takım API'ler ve çeşitli kütüphaneler sunarlar.
Geliştirici bu API'leri kullanırken bazı zamansal kısıtlamaları takip etmesi
gerekir. Bu tür kısıtlamalar ihlal edilmelimidir (istenmeyen enerji israf
problemleri gibi).
Hermansson vd. (2014) çalışmalarında platform bağımsız uygulamaları
incelemişlerdir. Uygulama pazarı genişledikçe geliştiriciler için yeni zorluklar
ortaya çıkmaktadır. Kullanışlı uygulamalar oluşturmak kapsamlı ve tutarlı
kullanımını sağlamak önemlidir. Çalışmalarında çevre hakkında konum bilgisi
veren "Time Machine" adlı bir mobil uygulama sunmaktadırlar. Uygulama
uzman değerlendirme ekibi ve 15 katılımcılı kullanıcılarla bir alan gözlemi
yapılarak değerlendirilmiştir. Sonuçlar yararlı mobil uygulamalar geliştirmek
için gerekli ilkeleri içermektedir. Geliştiricilerin kullanıcı davranışı, net bir
uygulama amacı, anlaşılabilir bir arayüz ve platform bağımsız özelliği konularını
dikkate almaları gerekmektedir.
Bouras vd. (2014) çalışmalarında web teknolojileri ile mobil uygulama
geliştirme potansiyellerini araştırmışlardır. Son yıllarda akıllı mobil cihazların
kullanımı çeşitli mobil platformlar için uygulama geliştirme genişlemesine yol
açan günlük yaşamın ayrılmaz bir parçası haline gelmiştir. Bu platformların her
biri ayrı yazılım geliştirme süreci gerektirir. Uygulama geliştirme HTML5'in
çıkmasıyla birlikte platform bağımsız uygulama tarzını ortaya çıkardı. Ek bir
önemli faydası, kullanıcıların kurulum için herhangi bir ihtiyaç olmadan hemen
uygulamaya erişebilir olmasıdır.
6
Nivedha vd. (2014) çalışmalarında Graduate Record Exam (GRE) için platform
bağımsız bir mobil uygulama geliştirmişlerdir. Graduate Record Exam (GRE)
çeşitli enstitüler ve kolejler tarafından kabul edilmiş düzenli bir testtir. GRE
hazırlığı için bazı mobil uygulamalar vardır. Bu uygulama Rho Mobile Suite
kullanılarak oluşturulmuştur ve IOS, Android ve Windows mobil sistemlerinde
çalıştırılabilir. Bu mobil uygulama ile ingilizce bilgi elde etmenin yanı sıra GRE
hazırlanması için öğrencilere yardımcı olur. Aynı zamanda farklı yaş kategorileri
altında çeşitli beyin uyarıcı faaliyetleri ile insan beyninin fonksiyonlarını
tetiklenmesi için yararlıdır. Geliştirilen mobil uygulama farklı kullanıcılar ile test
edilmiştir. G3 (GRE için Kazanç Kavrama) çapraz platformda geliştirilen bir
mobil uygulamadır.
Wahyu ve Suhardi (2014), mobil platformları analiz ederek tartışmışlardır.
Mobil platformda uygulama geliştirme, mobil işletim sisteminin hızla büyümesi
ve mobil bilişim performansının yeteneği bu yöne olan ilgiyi önemli ölçüde
artırmaktadır. Birçok mobil uygulama geliştiricileri günümüzde farklı bir mobil
işletim sistemi ortamında uygulanacak bir proje üzerinde çalışmaktadır.
Platform bağımsız uygulamalar şimdilerde geliştiricilerin mobil platform
kullanıcılarına ürünlerini satmada avantaj sağlamaktadır.
Karlı (2014) çalışmasında Hiper Metim İşretleme Dili (Hyper Text Markup
Language - HTML) ve Javascript kullanarak platform bağımsız mobil framework
geliştirmiştir. Bir uygulama geliştirildiğinde bir kaynak kod ve 2 platforma sahip
olunmaktadır. Kaynak kodda herhangi bir değişiklik yapıldığında, değişiklik
bütün platformlar için geçerli olmaktadır. Bu da geliştirme, test ve maliyeti
azaltmaktadır. HTML sayfaları performans açısından doğal SDK’dan daha iyi
değildir. Platform bağımsız mobil uygulamaların dezavantajlarından biri
performans gecikmeleridir.
Wafaa vd. (2015) çalışmalarında platform bağımsız uygulama yaklaşımlarının
sınıflandırılmasını incelemişlerdir. Geliştiriciler, platform bağımsız mobil
uygulama geliştirme çözümlerini bir defa yazıp her yerde çalıştırmak için
kullanırlar. Bu çapraz platform çözümleri hala araştırılmakta ve
7
geliştirilmektedir. Ayrıca, bu çözümler farklı yaklaşımlara dayanmaktadır.
Bunlar çapraz derleme yaklaşımı, sanal makine yaklaşımı, web tabanlı
yaklaşımlardır.
Andrade ve Albuquerque (2015) çalışmalarında platform bağımsız
uygulamaların karşılaştırmasını yapmışlardır. Bir platformun yerli dili ile
yazılan uygulamalar iyi bir kullanıcı deneyimi sağlayabilir. Ancak, şirketlerin
yeterli parası veya doğal dil ile uygulama geliştirecek uzmanı olmayabilir.
Hybrid yaklaşım akıllı telefonlar ve tabletler için uygulama geliştirmede basit
bir çözüm sunuyor. Kodu bir kere yazıp farklı işletim sistemlerine dağıtmak,
şirketler için, mobil uygulamalarını hızla başlatmaya ve bakım maliyetlerini
düşürmeye yardımcı olacaktır. Hybrid yapıları iş ve eğitim uygulamalarında
kullanmak faydalı olacaktır.
8
3. MATERYAL VE YÖNTEM
3.1. Programlama Dilleri
Elektronik cihazların farklı amaçlara hizmet edebilmek için programlanmaları
gerekir. Programlama dili, bu amaç için hazırlanmış özel kelime ve
sembollerden oluşan komutlar bütünüdür. Yazılan komutlar sonucunda
bilgisayarın belli bir iş yapmasını sağlayan programlar, yani yazılımlar ortaya
çıkar. Farklı bilgisayarlar ve teknolojiler için oluşturulmuş neredeyse
sayılamayacak kadar çok programlama dili mevcuttur. Her bir dilin kendine
özgü deyim, komut ve yazım kuralları vardır. Dile özgü komutların yazılması
süreci de kodlama ya da programlama, ortaya çıkan son ürün ise program ya da
uygulama olarak adlandırılır. Ortaya çıkan uygulamanın çalıştırıldığı ortama ise
platform adı verilir (Ersoy vd. 2011).
3.2. Platform
Platform, bir yazılımı çalıştırmak için gerekli olan donanım mimarisi ile bir
yazılım çerçevesi içermektedir. IOS, Android, Linux, Windows, BlackBerry,
Symbian gibi ortamlar, kendi platformlarına özgü uygulamaları
çalıştırmaktadırlar. Platform bağımsız uygulamalar ise bir kere yazıldıktan
sonra her platformda çalışabilen uygulamalardır. Şekil 3.1'de uygulama-
platform arası ilişki görülmektedir.
Şekil 3.
Platform bağımlılığı sorununu çözmek için çeşitli teknolojiler ve diller
geliştirilmiştir.
3.2.1. PhoneGap
PhoneGap, web tabanlı mobil uygulamalar
geliştirme çatısıdır (framework). PhoneGap ile uygulama
özgü dili (native language) kullanmadan HTML, CSS ve Javascript gibi web
teknolojileri ile her pla
2014).
3.2.2. Rhodes
Rhodes, açık kaynak çerçeveye dayalı, veri merkezli, platform bağımsız, yerli
mobil tüketici ve kurumsal uygulamaları oluşturmak için
geliştirme araçları kümesidir.
teknolojillerini kullanarak yerli
9
Şekil 3.1. Uygulama - Platform arası ilişki
bağımlılığı sorununu çözmek için çeşitli teknolojiler ve diller
web tabanlı mobil uygulamalar yazmayı sağlayan bir uygulama
geliştirme çatısıdır (framework). PhoneGap ile uygulama yazılacak
özgü dili (native language) kullanmadan HTML, CSS ve Javascript gibi web
teknolojileri ile her platformda çalışan uygulamalar yazılabil
Rhodes, açık kaynak çerçeveye dayalı, veri merkezli, platform bağımsız, yerli
mobil tüketici ve kurumsal uygulamaları oluşturmak için
geliştirme araçları kümesidir. CSS3, HTML5, Javascript ve Ruby gibi web
teknolojillerini kullanarak yerli mobil uygulamalar oluşturulmasına olanak
bağımlılığı sorununu çözmek için çeşitli teknolojiler ve diller
sağlayan bir uygulama
yazılacak platforma
özgü dili (native language) kullanmadan HTML, CSS ve Javascript gibi web
tformda çalışan uygulamalar yazılabilmektedir. (Varlık
Rhodes, açık kaynak çerçeveye dayalı, veri merkezli, platform bağımsız, yerli
mobil tüketici ve kurumsal uygulamaları oluşturmak için oluşturulmuş bir
SS3, HTML5, Javascript ve Ruby gibi web
mobil uygulamalar oluşturulmasına olanak
10
verir. Geliştiriciler uygulamayı bir kez yazarak, yaygın olarak kullanılan işletim
sistemlerinde çalıştırabilirler (Rhomobile, 2015).
3.2.3. MoSync
MoSync, ücretsiz ve açık kaynak yazılım geliştirme kitidir. Bu framework ile
C/C++, HTML5 scriptleri ve bunların kombinasyonları kullanılarak çoklu
platformlar için yerel mobil uygulamalar üretilebilir. MoSync için hedef grup,
web geliştiricileri ve C/C++ bilgisi olan masaüstü yazılım geliştiricileridir (Karlı,
2014).
3.2.4. Marmalade
Marmalade, ticari bir platform bağımsız mobil uygulama geliştirme aracıdır.
Oyun programlamada çok büyük bir kullanım alanı vardır. Marmalade C++, Lua,
HTML ve Objective-C dillerini desteklemektedir. Temelde ise, C++ SDK yüksek
bir performans sunar. IOS, android, BlackBerry, Windows Phone
platformlarında çalıştırılabilir (Karlı 2014).
3.2.5. JQuery Mobile
JQuery mobile; web siteleri ve tüm akıllı telefon, tablet ve masaüstü cihazlarda
erişilebilir uygulamalar yapmak için tasarlanmış bir HTML5 tabanlı kullanıcı
arayüzü sistemidir. JQuery ve JQuery UI elementleriyle sayfa geçişleri, dokunma
olayları ve çeşitli özellikler kullanılarak uygulamalar hazırlanabilir (JQuery
Mobile, 2015).
3.2.6. XMLVM
XMLVM bir çapraz derleyici aracıdır. XMLVM .Net, Java ya da Objective-C
dillerine çeviri yaparken java sınıflarına ve .NET çalıştırılabilir dosyalarına
ihtiyaç duyar. Şekil 3.2' de XMLVM mimarisi görülmektedir.
3.2.7. Xamarin
Xamarin, mono projesi olarak
ortamını kullanarak IOS, Android ve Windows Phone uygulamaları
geliştirebilirler. Xamarin
bilgisayarlarda Visual Studio, MAC bilgisayarlarda ise Xamarin Studio ile
yapılmaktadır (Karlı, 2014)
3.2.8. Sencha Touch
Sencha Touch, HTML5 ile Iphone, Android, BlackBerry ve diğer mobil
platformlar için uygulama
Javascriptin gelişmiş versiyonu olan ExtJS kullanılır. Açık kaynak bir
frameworktür. HTML5 mobil uygulama fra
olanıdır (Karlı, 2014)
11
Şekil 3.2. XMLVM mimarisi
mono projesi olarak bilinmektedir. Xamarin ile geliştiriciler
ortamını kullanarak IOS, Android ve Windows Phone uygulamaları
Xamarin, ticari bir frameworktür. Geliştirme
bilgisayarlarda Visual Studio, MAC bilgisayarlarda ise Xamarin Studio ile
(Karlı, 2014).
Touch
HTML5 ile Iphone, Android, BlackBerry ve diğer mobil
platformlar için uygulama geliştirmeye olanak sağlayan bir frameworktür.
Javascriptin gelişmiş versiyonu olan ExtJS kullanılır. Açık kaynak bir
HTML5 mobil uygulama framewrokleri arasında en performanslı
(Karlı, 2014).
. Xamarin ile geliştiriciler, C# - .NET
ortamını kullanarak IOS, Android ve Windows Phone uygulamaları
ticari bir frameworktür. Geliştirme; Windows
bilgisayarlarda Visual Studio, MAC bilgisayarlarda ise Xamarin Studio ile
HTML5 ile Iphone, Android, BlackBerry ve diğer mobil
bir frameworktür.
Javascriptin gelişmiş versiyonu olan ExtJS kullanılır. Açık kaynak bir
asında en performanslı
4. UYGULAMA VE ARAŞTIRMA BULGULARI
4.1. Bukalemun Programlama Dili
Bukalemun Windows ve Mobil ortamda Türkçe kodlama yapısı ile uygulama
oluşturmak için geliştirilmiş bir dildir.
kere derlendikten sonra Windows
çalıştırılabilir. Şekil 4.1
örneğin konsol ekran
sınıf Merhaba { fonksiyon başla() { yaz("Bukalemun ile Merhaba Dünya"); } }
Şekil 4.
4.1.1. Bukalemun dili dosya u
Bukalemun dili için kullanılan
gibidir.
12
4. UYGULAMA VE ARAŞTIRMA BULGULARI
Programlama Dili
Bukalemun Windows ve Mobil ortamda Türkçe kodlama yapısı ile uygulama
oluşturmak için geliştirilmiş bir dildir. Bukalemun ile yazılan uygulamalar bir
kere derlendikten sonra Windows (konsol ve form), IOS ve Android üzerinde
Şekil 4.1' de Bukalemun ile yazılmış bir örnek ve
ekranındaki görüntüsü verilmiştir.
başla()
yaz("Bukalemun ile Merhaba Dünya");
Şekil 4.1. Bukalemun ile ilk örnek
Şekil 4.2. Bukalemun ile ilk örneğin ekran görüntüsü
Bukalemun dili dosya uzantıları
Bukalemun dili için kullanılan dosya uzantıları Çizelge 4.1
Bukalemun Windows ve Mobil ortamda Türkçe kodlama yapısı ile uygulama
e yazılan uygulamalar bir
, IOS ve Android üzerinde
ve Şekil 4.2' de bu
Bukalemun ile ilk örneğin ekran görüntüsü
Çizelge 4.1' de gösterildiği
13
Çizelge 4.1. Bukalemun dili dosya uzantıları
Dosya Türü İşlevi
.buk Bukalemun kaynak kod dosyasıdır. Yazılan kodlar buk dosyası olarak kaydedilerek tekrar üzerinde düzeltmeler yapılabilir.
.ale Derleyiciye birden fazla .buk dosyası gönderilmesi gereken durumlarda, kaynak kod dosyaları .ale dosyası içine satır satır yazılarak gönderilir.
.mun Derlenmiş kod dosyası (Konsol uygulamaları, sadece windows)
.munf Derlenmiş kod dosyası (Form uygulamaları, Windows, IOS ve android)
4.2. Bukalemun Kodlarının Derlenmesi
Yazılan kodların yorumlama aşamasında ayrıştırmaya ihtiyaç duymaması için,
önce derleyiciden geçirilerek ayrıştırılmış düzenli bir komut kümesi
oluşturulması hedeflenmiştir. Bukalemun ile yazılan kodları derlemek için,
Delphi ile bir derleyici programı yazılmıştır. Bu programa gönderilen kaynak
kodlar derlenerek düzenli bir komut kümesi oluşturulmuştur. Komut satırından
“bfd” derleyici programına çalıştırılacak kaynak kod dosyası parametre olarak
gönderilerek kullanılmaktadır.
Hazırlanan uygulama sadece windowsta çalışan konsol uygulaması olarak
derlenecek ise, derleyiciye kaynak kod dosyası gönderilmesi yeterli olmaktadır.
Konsol uygulama dosyasının uzantısı “.mun” olarak derleyici tarafından
atanmaktadır.
Uygulamada form kontrolleri kullanılıyorsa, yani görsel programlama ile
oluşturulan kontroller var ise derleme işlemine “-form” parametresinin de
gönderilmesi gerekmektedir. Böylece derleyici, bu uygulamayı bir form
uygulaması olarak derleyecektir. Form uygulaması dosyasının uzantısı “.munf”
olarak derleyici tarafından atanmaktadır.
14
4.2.1. Bukalemun derleyici komut satırı parametreleri
Derleyicinin çalışmasına yön vermek için bazı parametreler kullanılır. Bu
parametrelerden istenilenler aralarında boşluk bırakılarak derleyiciye
gönderilir. Hiçbir parametre gönderilmezse varsayılan ayarlarla konsol
uygulaması olarak derleme işlemi yapılır. Derleyiciye gönderilebilecek
parametreler Çizelge 4.2' de gösterilmiştir.
Çizelge 4.2. Derleyici parametreleri
Parametre Anlamı
-form Uygulamanın form kontrolleri içerdiğini gösterir. -beklet Derleme işleminden sonra derleyicinin ekranda kalmasını
sağlar. -hexyok Derleme işleminin sonuçlarını okunur olarak bırakır. -tokengoster Kelime analizi sonucunda oluşturulan tokenleri konsol
ekranında gösterir. -konsolayaz Derleme işlemi sonucunda oluşan kodu konsol ekranında
gösterir.
4.3. Bukalemun Kodlama Ortamı
Bukalemun dili ile kodlama yapmak için, not defteri de dahil olmak üzere
herhangi bir editör kullanılabilir. Dosya kayıt edilirken uzantısı “.buk” olmalıdır
ve “UTF-8” formatında kaydedilmelidir. Bu tez çalışmasında Bukalemun için
özel olarak C# dili ile yazılan Bukalemun Framework Editör (BFE) programı
kullanılacaktır.
4.3.1. Bukalemun framework editör
Bukalemun Framework Editör (BFE) programı, bukalemun kodlarının
yazılması, hata ayıklama, kaynak kodları derleyiciye gönderme, derlenen
uygulamayı çalıştırma ve derleme sonuçlarını izleme gibi görevleri yerine
getirmektedir. BFE programının ekran görüntüsü Şekil 4.3' te görülmektedir.
15
Şekil 4.3. Bukalemun Framework Editör
4.3.2. BFE ile kaynak kod derleme
Bukalemun kaynak kodları derleme işlemi için Şekil 4.4' te görüldüğü gibi Derle
(Okunabilir), Derle ve Çalıştır, Derle (Hex) olmak üzere 3 seçenek vardır.
Derle (Okunabilir), derleyici, derleme işleminin sonucunda çalıştırılabilir bir
dosya oluşturur. Bu dosya içerisinde kodların 5 karakter uzunluğundaki hex
karşılıkları yer alır. Uygulamanın çalıştırılması, bu hex kodlarının okunması ile
olur. Bazı durumlarda, hex kodlarının yerine hex kodunun asıl karşılığını
koyarak daha okunaklı bir sonuç oluşturmak gerekebilir. Bu durumda
derleyiciye, parametre olarak “-hexyok” gönderilir. Böylece kaynak kodun
derleyiciden sonraki hali Şekil 4.5' te görüldüğü gibi açık bir şekilde
okunabilmektedir.
Derle ve çalıştır, derleme işlemi sonucunda oluşturulan kodların yorumlayıcıya
gönderilerek çalıştırılmasını sağlar.
16
Derle (Hex), derleme işlemi sonucunda oluşturulan hex kodları Şekil 4.6' daki
gibi kullanıcıya gösterilir.
Şekil 4.4. BFE ile kod derleme
Şekil 4.5. Derlenen kodların ortak dil karşılığı (Okunabilir)
17
Şekil 4.6. Derlenen kodların hex karşılığı
4.4. Bukalemun Kodlarının Hayat Döngüsü
Bukalemun kodunun yorumlanmaya hazır hale gelmesi için bazı adımlardan
geçmesi gerekmektedir. Programcı kaynak kodu yazar ve derleyiciye gönderir.
Derleyici gelen kaynak kodları alarak kelime analiziyle anlamlı parçalara ayırır.
Bu anlamlı parçalar sözdizimsel analize gönderilir. Bu aşamada arka arkaya
gelmesi gereken anlamlı parçalar kontrol edilerek istenilen satırlar ara kod
üretici ile oluşturulur. Derleyici bu ara kodları bir dosyaya yazar ve işlemini
tamamlar. Oluşturulan dosya yorumlayıcı tarafından açılır ve ilk sınıfın başla
fonksiyonundan yorumlama işlemi başlatılır. Bu adımların şematik gösterimi
Şekil 4.7' de gösterildiği gibidir.
18
Şekil 4.7. Bukalemun kodlarının derlenme - yorumlanma adımları
19
4.5. Bukalemun Dili Anahtar Kelimeleri
Bukalemun dilinde değişken tanımlamak, şarta bağlı olarak programa yön
vermek ve döngü işlemleri için kullanılan anahtar kelimeler vardır. Her
programla dilinde olduğu gibi bu anahtar kelimeler programlama dili için özel
anlamlar ifade ettiği için kendi amacı dışında kullanılamazlar. Örneğin “sayı”
kelimesi bukalemun dili için tam sayı türünü temsil ettiği için değişken adı veya
fonksiyon adı olarak kullanılamaz. Çizelge 4.3' te bukalemun dili anahtar
kelimeleri gösterilmiştir.
Çizelge 4.3. Bukalemun dili anahtar kelimeleri
sayı eğer bitir
vsayı ise devam
metin değilse gönder
karakter tekrarla sınıf
doğruyanlış say fonksiyon
4.6. Derleyici
Bir dilde yazılmış olan kodu (kaynak kod yada source code) istenilen başka bir
kod haline dönüştüren programdır. Genelde üretilen bu kod ortama göre
çalıştırılabilir kod (executable code) olarak üretilmektedir. Derleyicinin diğer
bir tanımı ise daha üst seviye bir dilden daha alt seviyeli bir dile tercüme olarak
kabul edilebilir. Buna göre örneğin C dilinden Assembly veya makine dili gibi
daha alt dillere tercüme ile derleyici kavramı daha da sınırlandırılmış olarak
kabul edilebilir. Derleyiciler günümüzde daha çok bir dilde yazılmış koddan,
işletim sistemi ve donanım bağımlı kodların üretilmesinde kullanılmaktadırlar.
Bu üretim sırasında ya doğrudan işletim sisteminin anlayacağı ve çalıştıracağı
kodları üretirler ya da işletim sisteminde bulunan veya yine dil bağımlı olarak
çalışan bağlayıcı (linker) programların anlayacağı ara kodları üretirler (Şeker
2008). Örneğin Şekil 4.8' de bir programın kaynak kodundan bir satır
görülmektedir.
20
X = 2 + Y
Şekil 4.8. Örnek bir program satırı
Şekil 4.9'da assembly dilinde yazılmış satırlar, Şekil 4.8' daki kodun derlenmiş
halidir.
LOAD A [0] ;; belleğin 0 adresindeki veriyi A siciline yükle
ADD A BX ;; A siciline BX sicilindeki adreste bulunan veriyi ekle
STOR A [100] ;; Sonucu 100 adresine yaz
Şekil 4.9. Assembly dili kod karşılığı
Derleme işlemi adımları; kelime analizi, söz dizimsel analiz ve ara kod üreticidir.
4.7. Kelime Analizi
Program metninin okunduğu ve analiz edildiği ilk kısımdır. Kaynak kod
derleyiciye ilk geldiği zaman, ilk olarak, kaynak kodun harfleri teker teker
işlenir ve tanımlanarak “Belirtke (token)” adlı nesnelere dönüştürülür. Belirtke;
değişken adı, anahtar kelime ya da sayı gibi programlama dilindeki bir sembolü
gösterir. Sözcüksel analizi gerçekleştiren derleyici parçasına “lexer” denir.
Sözcüksel analizin görevi, yazım analizi yapıp sonuç olarak bir belirtke listesi
oluşturmaktır (Zengin 2010).
Bilgisayar bilimlerinde programlama dillerinin tasarımı ve geliştirilmesi
sırasında kullanılan ve dildeki kelimelerin analizini (lexical analysis)
gerçekleştiren kod üretme programıdır. Yani hazırlanmış bir kaynak kod
dosyasını kelime analizi programından geçirdikten sonra ortaya istenilen dilde
bir kod çıkar. Bu kodu derledikten (compile) sonra çalışan bir program ortaya
çıkar (Şeker 2008).
21
Yüksek seviyeli bir dille yazılan kodun çalıştırılabilmesi için en düşük seviyede
bilgisayarın işleyebileceği komutlar dizisi haline getirilmesi gereklidir. Bu
sebeple kaynak kodu oluşturan karakter katarı anlamlı alt parçalara
ayrıştırılmalıdır. Alt parçalara belirtke, bunları ayrıştırma işlemine de kelime
analizi denir. Kelime analizi işleminin çıktısı olan belirtkeler bir sonraki aşama
olan sözdizimsel analiz bileşenine aktarılır. Belirtkeler sözdizimsel bir kategori
belirtir. Bu kategoriler doğal diller için “isim”, “sıfat”, “fiil” vb. olabilirken,
programlama dilleri için “matematiksel sembol” veya “anahtar kelime” gibi alt
ifadeler olurlar. Belirtke ile gösterilen bir alt karakter katarı parametre olarak
adlandırılır. Programlama dili içinde kullanılması mümkün olan tüm
parametreler tanımlanırken örüntüler (pattern) kullanılır. Örüntüler düzenli
ifadeler (regular expressions) kullanılarak tanımlanır. Bu aşamada düzenli
ifadelerin kullanılmasının sebebi işlenen karakter katarı içinde kabul edilebilir
bir belirtke bulabilmenin bazen geriye dönük arama da gerektirebilmesidir
(Kılıçarslan 2006).
Bir kelime analizi aracı şu 3 şeyi yapabilmelidir:
1. Bütün boşlukları ve açıklamaları temizlemeli,
2. Karakter katarı içindeki tüm belirtkeler (token) bulunmalı,
3. Bulunan belirtkeler için bulunduğu satır numarası gibi özellikler
döndürülmelidir.
Örnek 1: Şekil 4.10'daki kod parçasına göre oluşturulan belirtkeler Çizelge 4.4'
te verilmiştir.
toplam = 5 + 3;
Şekil 4.10. Toplama işlemi örnek kod satırı
22
Çizelge 4.4. Toplama işlemi örnek kod satırına göre oluşturulan belirtkeler
Parametre Belirtke
toplam Tanımlayıcı
= Atama Operatörü
5 Sayısal Veri
+ Toplama Operatörü
3 Sayısal Veri
; Noktalı Virgül
Kelime analizinden elde edilen belirtkeler söz dizimsel analiz aşamasına
gönderilir.
4.8. Söz Dizimsel Analiz
Kelime analizinden elde edilen belirtke listesinin dilin söz dizimine uygun olup
olmadığını belirler. Eğer söz diziliminde hata olursa kullanıcıya bilgi verilir ve
derleme işlemi iptal edilir.
Söz dizimsel analiz için noktalı virgül sembolünün büyük önemi vardır. Noktalı
virgül bir satırın bittiği anlamına gelir. Derleyici işletilecek olan işlemin
(değişken tanımlama, değer atama, şart, döngü, fonksiyon tanımlama ve
çağırma) ne olduğuna karar verirken, noktalı virgül o anki işlemin bittiğini
anlamına gelir.
4.8.1. Değişken tanımlamanın söz dizimsel analizi
Bukalemun dili için değişken tanımlama 3 şekilde yapılır. Bunlar; değişkenin
türü ve adı yazılarak, değişkenin türü ve adından sonra ilk değer ataması
yapılarak ya da değişkenin türü ve adından sonra matematiksel bir işlemin
sonucunu atayarak yapılır. Çizelge 4.5' te üç çeşit tanımlama için kodlama
örneği ve belirtkeler verilmiştir.
23
Çizelge 4.5. Kod satırına karşılık beklenen belirtkeler
Kodlama Beklenen Belirtkeler
Değişken_türü değişken_adı;
Örnek: sayı a;
Tanımlayıcı Tanımlayıcı Noktalı Virgül
Değişken_türü değişken_adı = ilk_değer;
Örnek: metin m = “Antalya”;
Tanımlayıcı Tanımlayıcı Atama Operatörü Metinsel Veri Noktalı Virgül
Değişken_türü değişken_adı = matematiksel_işlem;
Örnek: sayı x = 10 + 5 * 3;
Tanımlayıcı Tanımlayıcı Atama Operatörü Sayısal Veri Toplama Operatörü Sayısal Veri Çarpma Operatörü Sayısal Veri Noktalı Virgül
Bukalemun dilinde değişken tanımlamanın doğru olabilmesi için ya 2
tanımlayıcı belirtkesi ve arkasından 1 noktalı virgül belirtkesi gelmelidir ya da
sırasıyla 2 tanımlayıcı belirtkesi, 1 atama operatörü belirtkesi, 1 tanımlayıcı
belirtkesi ve son olarak 1 noktalı virgül belirtkesi gelmelidir. Bu belirtkelerden
eksik veya sırası yanlış olan olursa derleyici hata mesajı göstererek derleme
işlemini durdurur.
Şekil 4.11' de sayı tipinde bir değişken tanımlanırken değişken adından sonra
noktalı virgül gerekirken büyüktür işareti kullanılarak hata yapılmıştır. Bu
hatayı Şekil 4.12' de derleyici programcıya bildirmektedir.
sınıf Değişkenler { fonksiyon başla() { sayı a > ; } }
Şekil 4.11. Hatalı değişken tanımlaması yapılan örnek
Şekil 4.12. Hatalı değişken tanımlaması
4.9. Shunting Yard Algoritması Analizi
Bir ifade de farklı önceliklere sahip operatörler yazılma sırasına göre işlenirse
ifade yanlış sonuçlanabilir. Böyle durumlarda işlem öncelikleri göz önüne
alınarak işlem önceliği yüksek olan ifadeden başlamak gerekecektir. Bilgisayar
dilinde işlem önceliğin
tarafından bulunan
Yard Algoritmasına göre matematiksel ifadeler Infix, Prefix ve Postfix olarak 3
şekilde yazılır.
Infix notasyonu, operatörlerin işlenecek operandlar arasına yerleştirildiği
gösterim biçimidir.
gösterimde operatör önceliklerinin değiştirilebilmesi için parantez kullanılması
şarttır. Örneğin infix notasyonundaki '2+4*6' ifadesi 2+24=26 ile sonuçlanır.
Aynı ifadede + operatörüne öncelik verilmesi istenirse parantezler kullanılır;
'(2+4)*6'. Böylece ifade 36 ile sonuçlandırılır. Genelde bilgisayar girdilerinde bu
notasyon kullanılır. Ancak girdiler işlenmeden önce prefix veya postfix
notasyonuna çevrilir
Prefix notasyonunda operatörler, operandlarından önce yazılır. Örneğin inf
notasyonundaki '2+4*6' ifadesi prefix notasyonunda '+ 2 * 4 6' şeklinde
gösterilir. Benzer şekilde '(2+4)*6' ifadesi '* + 2 4 6' şeklinde gösterilir.
notasyonunda işlem önceliklerinin sağlanması için parantezlere ihtiyaç
(Atasoy 2011).
24
Hatalı değişken tanımlaması örneği için derleyici ekran görüntüsü
Shunting Yard Algoritması Analizi
Bir ifade de farklı önceliklere sahip operatörler yazılma sırasına göre işlenirse
ifade yanlış sonuçlanabilir. Böyle durumlarda işlem öncelikleri göz önüne
önceliği yüksek olan ifadeden başlamak gerekecektir. Bilgisayar
dilinde işlem önceliğine göre ayrıştırma yapan algoritma
tarafından bulunan "Shunting Yard" algoritmasıdır (Atasoy 2011)
Yard Algoritmasına göre matematiksel ifadeler Infix, Prefix ve Postfix olarak 3
Infix notasyonu, operatörlerin işlenecek operandlar arasına yerleştirildiği
gösterim biçimidir. "2 + 3 * 5 - 2 + 7" gösterim biçimi infix notasyonud
gösterimde operatör önceliklerinin değiştirilebilmesi için parantez kullanılması
şarttır. Örneğin infix notasyonundaki '2+4*6' ifadesi 2+24=26 ile sonuçlanır.
Aynı ifadede + operatörüne öncelik verilmesi istenirse parantezler kullanılır;
Böylece ifade 36 ile sonuçlandırılır. Genelde bilgisayar girdilerinde bu
notasyon kullanılır. Ancak girdiler işlenmeden önce prefix veya postfix
notasyonuna çevrilir (Atasoy 2011).
Prefix notasyonunda operatörler, operandlarından önce yazılır. Örneğin inf
notasyonundaki '2+4*6' ifadesi prefix notasyonunda '+ 2 * 4 6' şeklinde
gösterilir. Benzer şekilde '(2+4)*6' ifadesi '* + 2 4 6' şeklinde gösterilir.
notasyonunda işlem önceliklerinin sağlanması için parantezlere ihtiyaç
örneği için derleyici ekran görüntüsü
Bir ifade de farklı önceliklere sahip operatörler yazılma sırasına göre işlenirse
ifade yanlış sonuçlanabilir. Böyle durumlarda işlem öncelikleri göz önüne
önceliği yüksek olan ifadeden başlamak gerekecektir. Bilgisayar
ma Edsger Dijkstra
(Atasoy 2011). Shunting
Yard Algoritmasına göre matematiksel ifadeler Infix, Prefix ve Postfix olarak 3
Infix notasyonu, operatörlerin işlenecek operandlar arasına yerleştirildiği
2 + 7" gösterim biçimi infix notasyonudur. Bu
gösterimde operatör önceliklerinin değiştirilebilmesi için parantez kullanılması
şarttır. Örneğin infix notasyonundaki '2+4*6' ifadesi 2+24=26 ile sonuçlanır.
Aynı ifadede + operatörüne öncelik verilmesi istenirse parantezler kullanılır;
Böylece ifade 36 ile sonuçlandırılır. Genelde bilgisayar girdilerinde bu
notasyon kullanılır. Ancak girdiler işlenmeden önce prefix veya postfix
Prefix notasyonunda operatörler, operandlarından önce yazılır. Örneğin infix
notasyonundaki '2+4*6' ifadesi prefix notasyonunda '+ 2 * 4 6' şeklinde
gösterilir. Benzer şekilde '(2+4)*6' ifadesi '* + 2 4 6' şeklinde gösterilir. Prefix
notasyonunda işlem önceliklerinin sağlanması için parantezlere ihtiyaç yoktur
25
Postfix notasyonunda önce operandlar ve ardından operatör yerleştirilir. Infix
notasyonundaki '2+4*6' ifadesi postfix notasyonunda '2 4 6 * +' şeklinde
gösterilir. Benzer şekilde '(2+4)*6' ifadesi '2 4 + 6 *' şeklinde gösterilir. Yine
prefixte olduğu gibi bu gösterimde de parantezlere itiyaç duyulmaz (Atasoy
2011).
Bukalemun dilinde programcının yazdığı infix notasyonundaki girdiler söz
dizimsel analiz aşamasında postfix notasyonuna çevrilir. Şekil 4.13' deki infix
ifadesinin postfix karşılığı Şekil 4.14' te görülmektedir. Şekil 4.15' te ise aynı
infix ifadesinin söz dizimsel analizi sonucu oluşan kodlar görülmektedir.
20 - 5 * (4 + (6 * 5 - (3 * 1) + 2))
Şekil 4.13. Infix ifadesi
20 5 4 6 5 * 3 1 * - 2 + + * -
Şekil 4.14. Postfix ifadesi
26
Şekil 4.15. Söz dizimsel analiz sonucu oluşan postfix ifadesi
4.10. Yorumlayıcı
Yorumlanan programlama dilleri bilgisayar programlamada yazılan
programların çalışabilmeleri için kaynak kodlarının bir yorumlayıcı tarafından
yorumlanması gerektiğini ifade etmektedir. "Interpreted programming
language" olarak da geçmektedir. Teorik olarak herhangi bir proglamlama dili
ile yazılan bir program, kendi derleyicisi tarafından makine diline dönüştürülür
ve derlendikleri platform üzerinde C, Ada, Pascal, Delphi, Algol dillerinde olduğu
gibi doğrudan çalıştırılır ya da Python, Ruby, Java, Lisp, BASIC dillerinde olduğu
gibi o dilin yorumlayıcısı tarafından işletilerek çalıştırılır (Wikipedia 2015).
27
4.10.1. Yorumlanan dillerin özellikleri
Yorumlanan programlama dilleri genellikle şu özelliklere sahiptir:
• Platformdan bağımsızdır
• Hata ayıklama kolaydır
• Program boyutu küçüktür
4.10.2. Bukalemun dili yorumlayıcıları
Bukalemun dili için her platforma özel platformun kendi programlama dili ile
yorumlayıcılar yazılmıştır. Böylece derleyiciden çıkan kod Windows, IOS ve
Android platformlarında sorunsuz bir şekilde yorumlanmaktadır.
4.11. Bukalemun Dili Kodlaması
Her programlama dilinin kendine özgü kodlama yapısı ve anahtar kelimeleri
vardır. Bu anahtar kelimelerin belirli bir düzen ve sıra ile yazılması programı
oluşturur. Bukalemun dilinde de değişken ve fonksiyon tanımlamak, şart ve
döngü deyimleri kullanmak matematiksel işlemler yapmak için çeşitli anahtar
kelimeler vardır.
Programlama dillerinin en temel işlemi değişken tanımlamadır.
4.12. Değişkenler
Herhangi bir verinin RAM'da depolanmasını sağlar. Böylece değişkene verilen
isim ile o veriye istenildiği zaman ulaşılır. Değişkene isim verirken diğer
programlama dillerinde olduğu gibi isimlendirme kurallarına uymak gerekir.
Değişken tanımlaması Şekil 4.16'da gösterildiği gibi yapılır. Değişkende
saklanacak veri türüne göre tanımlama örnekleri Çizelge 4.6' da gösterilmiştir.
28
değişken_türü değişken_adı;
değişken_türü değişken_adı = değişkenin_ilk_değeri;
Şekil 4.16. Değişken tanımlama
Çizelge 4.6. Değişken tanımlama örnekleri
Veri Türü Tanımlama Örneği
Sayısal sayı a; Ondalıklı Sayı vsayı b; Metinsel metin c; Tek Karakter karakter d; Doğru Yanlış doğruyanlış e;
4.12.1. Değişken türleri
Bir verinin geçici hafızada depolanması gerektiği durumlarda değişken
tanımlaması yapılır. Değişken tanımlaması yapmadan önce verinin türüne karar
vermek gerekmektedir. Bu türler "sayı", "vsayı", "metin", "karakter",
"doğruyanlış" olabilir. Verinin türüne göre hafızada kaplayacağı alan
değişmektedir. Çizelge 4.7' de değişkenlerin bellekte kapladığı alanlar
görülmektedir.
Çizelge 4.7. Değişkenlerin bellekte kapladığı alan
Değişken Türü Bellekte Kapladığı Alan sayı 32 bit vsayı 64 bit metin Karakter Sayısı Kadar (Byte) karakter 1 Byte doğruyanlış 1 Bit
4.12.2. Değişkenlerin Geçerlilik Alanları
Programlama dillerinde değişkenlerin tanımlanmasından sonra geçerli
oldukları bir alan vardır. Bu alan dışından erişilemezler. Değerleri
değiştirilemez.
29
Bukalemun dilinde değişkenler tanımlandıklar { } (süslü parantezler) içerisinde
geçerlidir. Değişkenler süslü parantez kapandıktan sonra bellekten silinirler.
Şekil 4.17'de verilen kod için, a değişkeni sınıf içerisinde tanımlandığı için her
yerde kullanılabilir. b değişkeni ise başla fonksiyonu içerisinde tanımlandığı için
sadece başla fonksiyonu içerisinde kullanılabilir. c değişkeni eğer ifadesi
içerisinde tanımlandığı için sadece eğer ifadesi içerisinde kullanılabilir. Eğer
ifadesi bittikten sonra c değişkeni silinir.
sınıf Değişkenler { sayı a = 100; // a değişkeni bu noktadan itibaren geçerlidir. fonksiyon başla() { sayı b = 200;// b değişkeni bu noktadan itibaren geçerlidir. eğer a > 50 ise { sayı c = a + b; // c değişkeni bu noktadan itibaren geçerlidir.
} // c değişkeni bu paranteze kadar geçerlidir. } // b değişkeni bu paranteze kadar geçerlidir. }// a değişkeni bu paranteze kadar geçerlidir.
Şekil 4.17. Değişkenlerin geçerlilik alanlarını gösteren örnek
4.12.3. Değişkenlere değer atama
Program içerisinde değişkenlerin değerlerinin ihtiyaca göre değişmesi
gerekebilmektedir. Değişkene değer atama değişkenin tanımlanma anından
itibaren başlar değişkenin geçerli olduğu alan sonuna kadar devam eder. Değer
atama işlemi = (Eşittir) operatörü ile yapılır. Operatörün sağındaki ifadeler
solundaki değişkene atanır. Şekil 4.18' de değişkenlere değer atama örneği
gösterilmektedir.
30
sınıf Değişkenler { fonksiyon başla() { sayı x = 100; // x değişkeni tanımlandığı anda değeri atanıyor. x = 150; // Program içerisinde x değişkeninin değeri değiştiriliyor. } }
Şekil 4.18. Değişkenlere değer atama
4.12.4. Değişkenlere klavyeden değer atama
Konsol uygulamalarında kullanıcının klavyeden yazdığı veri değişkene
atanabilir. Bu işlem için sadece konsol uygulamalarında kullanılabilen oku()
fonksiyonu kullanılmaktadır.
Şekil 4.19' da metin türünde tanımlanan okunan değişkenine tanımlama anında
klavyeden girilen metin türündeki değer atanmaktadır.
sınıf Değişkenler { fonksiyon başla() { metin okunan = oku(); } }
Şekil 4.19. Metin türündeki değişkene klavyeden değer atama
31
4.12.5. Değişkenlere değer atarken oluşabilecek hatalar
Bukalemun dilinde değişkene değer ataması yapılırken değişken tipine göre tür
dönüşümünü otomatik olarak yapılır. Ancak değişkene atanacak olan veri
değişkenin türüne uygun olmalıdır. Aksi halde hata oluşacaktır.
Şekil 4.20'de metin tipinde tanımlanan m değişkenine "3" değeri atanıyor. Daha
sonra sayı tipinde tanımlanan s değişkenine, metin tipindeki m değişkenin
değeri sayı tipine dönüştürülerek atama işlemi yapılmaktadır.
metin m = "3";
sayı s = m;
Şekil 4.20. Metin türünden sayı türüne dönüşüm yaparak atama
Şekil 4.21'de verilen örnekte metin tipinde tanımlanan m değişkenine "üç"
değeri atanmaktadır. Daha sonra sayı tipindeki s değişkenine metin tipindeki m
değişkeninin değeri atanmak isteniyor ancak "üç" değeri sayı tipine
dönüştürülemeyeceği için Şekil 4.22'deki hata mesajı alınacaktır.
Metin m = "üç";
sayı s = m;
Şekil 4.21. Hatalı tür dönüşüm örneği
Şekil 4.22
4.12.6. Değişkenler
Konsol uygulamalarında bir değişkenin değerini
yazdırmak için yaz
yaz kendine verilen parametreleri ekrana yazar,
parametreleri ekrana yazdıktan sonra imlec
sonra yazılanlar yeni satırdan başlamış
m değişkeninin değeri ekrana yazıl
görüntüsü vardır.
sınıf Yazdır { fonksiyon başla() { metin
yaz(m); } }
Şekil 4.23
32
22. Hatalı tür dönüşümde karşılaşılan hata
Değişkenlerin değerlerini ekrana yazdırma
Konsol uygulamalarında bir değişkenin değerini veya sabit bir ifadeyi ekrana
ve yazA fonksiyonları kullanılmaktadır. Bu fonksiyonlardan
len parametreleri ekrana yazar, yazA fonksiyonu ise gönderilen
parametreleri ekrana yazdıktan sonra imleci alt satıra taşır. Böylece bundan
sonra yazılanlar yeni satırdan başlamış olacaktır. Şekil 4.23'
değişkeninin değeri ekrana yazılmıştır. Şekil 4.24' te ise örneğin ekran
başla()
metin m = "Bukalemun ile Merhaba Dünya"; (m);
23. Değişken değerini konsol ekranına yazdırma
mesajı
veya sabit bir ifadeyi ekrana
. Bu fonksiyonlardan
fonksiyonu ise gönderilen
i alt satıra taşır. Böylece bundan
te verilen örnekte
ise örneğin ekran
Değişken değerini konsol ekranına yazdırma
Şekil 4.24. Değişken değerini ekrana yazdırma örneği ekran görüntüsü
4.12.7. Önceden tanımlı
Bukalemun içerisinde
değişkenler vardır. Bu değişkenler uygulama
hakkında bilgi tutarlar.
4.12.7.1. platform değişkeni
Platform metin türünde
platform bilgisini tutar. Bu değişkenin değeri kontrol edilerek uygulamaya yön
verilebilir. Farklı platformlardaki
gösterilmiştir.
Çizelge 4.
Uygulama
Windows Konsol UygulamalarıWindows Form UygulamalarıIPhone uygulamaları Android Uygulamaları
Şekil 4.25' te verilen
uygulaması ise ekrana platform değişkenin değerini
değişkenin değerini mesaj
ekranındaki görüntüsü
4.27' de, android ve IOS ekranındaki görüntüsü ise
33
Değişken değerini ekrana yazdırma örneği ekran görüntüsü
anımlı değişkenler
Bukalemun içerisinde uygulama çalıştırıldığı anda otomatik olarak
değişkenler vardır. Bu değişkenler uygulama ve uygulamanın çalıştığı platform
hakkında bilgi tutarlar.
değişkeni
metin türünde tanımlanmış bir değişkendir. Uygulamanın çalıştırıldığı
platform bilgisini tutar. Bu değişkenin değeri kontrol edilerek uygulamaya yön
Farklı platformlardaki platform değişkeninin değeri
Çizelge 4.8. Platform değişkeninin alabileceği değerler
Değişkenin Değeri
Uygulamaları konsol Uygulamaları win form
ios Android Uygulamaları android
verilen örnekte platform değişkeni kontrol edilerek
uygulaması ise ekrana platform değişkenin değerini yazılır
ini mesaj penceresinde ekranda gösterir. Uygulamanın konsol
ekranındaki görüntüsü Şekil 4.26' da, windows ekranındaki görüntüsü
de, android ve IOS ekranındaki görüntüsü ise Şekil 4.28' de
Değişken değerini ekrana yazdırma örneği ekran görüntüsü
uygulama çalıştırıldığı anda otomatik olarak tanımlanan
nın çalıştığı platform
bir değişkendir. Uygulamanın çalıştırıldığı
platform bilgisini tutar. Bu değişkenin değeri kontrol edilerek uygulamaya yön
değeri Çizelge 4.8' de
Platform değişkeninin alabileceği değerler
örnekte platform değişkeni kontrol edilerek, konsol
yazılır değilse platform
Uygulamanın konsol
, windows ekranındaki görüntüsü Şekil
de görülmektedir.
sınıf Platform { fonksiyon başla() { eğer platform == "konsol" değilse
} }
Şekil 4.25. Uygulamanın çalıştığı platform bilgisini gösteren program
Şekil 4.
Şekil 4.27. Windows Form uygulamalarında platform değişkeni
34
başla()
platform == "konsol" ise yaz(platform);
değilse mesaj(platform);
Uygulamanın çalıştığı platform bilgisini gösteren program
Şekil 4.26. Konsol uygulamalarında platform değişkeni
Windows Form uygulamalarında platform değişkeni
Uygulamanın çalıştığı platform bilgisini gösteren program
değişkeni
Windows Form uygulamalarında platform değişkeni
Şekil 4.28.
4.12.7.2. uygulamadosyası
Metin türünde tanımlanan
dosyasının tam yolunu tutar. Bu değişken kullanılarak çalıştırılan uygulamanın
dosya adı alınabilir.
4.13. Açıklama Satırları
Programlama dillerinde kodlar arasına yazılan
sadece açıklama amacıyla yazılan satırlar bulunur.
değişkenlere, satırlara, fonksiyonlara ve diğer ifadelere daha sonra
okunduğunda o kod ile ilgili bilgi vermektir
35
Android ve IOS platformları için platform değişkeni
uygulamadosyası değişkeni
Metin türünde tanımlanan uygulamadosyası değişkeni çalıştırılan uygulama
dosyasının tam yolunu tutar. Bu değişken kullanılarak çalıştırılan uygulamanın
. Açıklama Satırları
Programlama dillerinde kodlar arasına yazılan, derleyicinin görmezden geldiği
sadece açıklama amacıyla yazılan satırlar bulunur. Açıklamaların amacı
eğişkenlere, satırlara, fonksiyonlara ve diğer ifadelere daha sonra
od ile ilgili bilgi vermektir. Bukalemun dilinde iki türlü
Android ve IOS platformları için platform değişkeni
değişkeni çalıştırılan uygulama
dosyasının tam yolunu tutar. Bu değişken kullanılarak çalıştırılan uygulamanın
derleyicinin görmezden geldiği,
Açıklamaların amacı
eğişkenlere, satırlara, fonksiyonlara ve diğer ifadelere daha sonra
Bukalemun dilinde iki türlü
36
açıklama satırı eklenir. Çizelge 4.9' da bukalemun dilinde kullanılan açıklama
satırları görülmektedir.
Çizelge 4.9. Açıklama satırları
Açıklama Satırı Sembolü Anlamı
// Tek satırlık açıklama /* */
Çok satırlı açıklama
4.14. Operatörler
Değişkenler ve veriler üzerinde aritmetiksel, mantıksal ve ilişkisel karşılaştırma
işlemi yapılmasını sağlayan simgelerdir. Bukalemun dilindeki operatörler
Çizelge 4.10'da gösterildiği gibidir.
Çizelge 4.10. Bukalemun dili operatörleri
Operatör Açıklama Operatör Açıklama + Toplama += Toplayarak ata - Çıkarma -= Çıkararak ata * Çarpma *= Çarparak ata / Bölme /= Bölerek ata ++ Bir arttır -- Bir azalt = Atama % Mod ** Üssü %= Mod alarak ata == Eşit mi? != Eşit değil mi? < Küçük <= Küçük ve eşit > Büyük >= Büyük ve eşit ve Şartların hepsi
doğru veya Şartların en az 1
tanesi doğru ! Değil
Bukalemun dili operatörlerinin kullanımı diğer programlama dillerinde olduğu
gibidir. Farklı olarak ** (üs) operatörü sayısal veriler üzerinde üs almak için
kullanılır.
Şekil 4.29'da aritmetik operatörler kullanılarak yapılan konsol uygulamasının
ekran görüntüsü Şekil 4.30'da görülmektedir.
37
sınıf ArtimetikselOperatörler { fonksiyon başla() { sayı a = 50; sayı b = 20; yazA(a, " + ", b, " = ", a+b); yazA(a, " - ", b, " = ", a-b); yazA(a, " * ", b, " = ", a*b); yazA(a, " / ", b, " = ", a/b); yazA(a, " mod ", b, " = ", a%b); yazA(5, " üssü ", 3, " = ", 5**3); sayı c = 5; c++; yazA("c değişkeninin değeri: ", c); c--; yazA("c değişkeninin değeri: ", c); sayı d = 100; d += a; yazA("d değişkeninin değeri: ", d); d -= 130; yazA("d değişkeninin değeri: ", d); d *= 3; yazA("d değişkeninin değeri: ", d); d /= 12; yazA("d değişkeninin değeri: ", d); d %= 2; yazA("d değişkeninin değeri: ", d); } }
Şekil 4.29. Aritmetiksel operatörlerin tamamının kullanıldığı bir uygulama
Şekil 4.30
4.15. Kontrol İfadeleri
Programlamada bazı kodların uygun şartlar altında çalışması
istenir. Bu gibi durumlarda kontrol ifadeleri kullanılır.
kendilerine verilen şartların doğruluk durumlarını kontrol ederek gerekli
kodları çalıştırır ya da çalıştırmazlar.
4.15.1. eğer
Eğer kontrol ifadesiyle kodların belirli şartların yerine gelmesiyle çalışma
sağlanır. Şekil 4.31'de
eğer <şart>ise {
//kodlar
}
38
30. Aritmetik operatörler örneği ekran görüntüsü
. Kontrol İfadeleri
Programlamada bazı kodların uygun şartlar altında çalışması
istenir. Bu gibi durumlarda kontrol ifadeleri kullanılır.
kendilerine verilen şartların doğruluk durumlarını kontrol ederek gerekli
kodları çalıştırır ya da çalıştırmazlar.
rol ifadesiyle kodların belirli şartların yerine gelmesiyle çalışma
'de eğer ifadesinin kullanımı görülmektedir.
Şekil 4.31. Eğer ifadesi kullanımı
Aritmetik operatörler örneği ekran görüntüsü
Programlamada bazı kodların uygun şartlar altında çalışması veya çalışmaması
istenir. Bu gibi durumlarda kontrol ifadeleri kullanılır. Kontrol ifadeleri
kendilerine verilen şartların doğruluk durumlarını kontrol ederek gerekli
rol ifadesiyle kodların belirli şartların yerine gelmesiyle çalışması
kullanımı görülmektedir.
39
4.15.2. değilse
Eğer ifadesiyle beraber kullanılır. Eğer ifadesindeki şartların sağlanmadığı
durumlarda çalıştırılmak istenen kodlar bu blok içerisine yazılır. Şekil 4.32' de
değilse ifadesinin kullanımı görülmektedir.
eğer <şartlar>ise { // şartlar doğru ise kodlar } değilse
{ // şartlar yanlış ise kodlar }
Şekil 4.32. eğer - değilse ifadesi kullanımı
4.15.3. eğer - değilse eğer
Birden fazla eğer ifadesinin şartlarının bir birine bağlı olarak çalışması istendiği
durumlarda kullanılır. İlk eğer ifadesinin şartı sağlanırsa diğerleri kontrol
edilmeden atlanır. Eğer ifadesinin şartı sağlanmazsa sonraki eğer ifadesine
geçilerek kontrol edilir. Şekil 4.33' de eğer - değilse eğer ifadesi kullanımı
görülmektedir.
sınıf eğer_değilse_eğer { fonksiyon başla() { eğer <şart1> ise { // kodlar } değilse eğer <şart2> ise { // kodlar } değilse eğer <şart3> ise { // kodlar
40
} değilse
{ // kodlar } } }
Şekil 4.33. eğer - değilse - eğer ifadesi kullanımı
4.15.4. İç içe eğer
Eğer ifadelerinden bazıları başka eğer ifadelerine bağlı olduğu durumlarda
kullanılır. İçteki eğer ifadesinin çalışabilmesi için öncelikle dıştaki eğer
ifadesinin çalışması ve şartının sağlanması gerekir. Şekil 4.34' te iç içe eğer
ifadesinin kullanımı görülmektedir.
sınıf iç_içe_eğer { fonksiyon başla() { eğer<şart1>ise { eğer<şart2>ise { // kodlar } Değilse { // kodlar } } değilse { // kodlar } } }
Şekil 4.34. İç içe eğer ifadesi kullanımı
41
4.16. Döngü deyimleri
Kod veya kod gruplarının birden fazla defa çalıştırılması istenildiği durumlarda
döngüler kullanılır. Döngüler çalışma şekillerine göre başlangıç, bitiş ve artış
değeri sabit olan ve belirli bir şart sağlandığı sürece tekrar eden olmak üzere
ikiye ayrılır.
4.16.1. say döngüsü
Başlangıç, bitiş ve artış değerinin belli olduğu durumlarda say döngüsü
kullanılır. Say döngüsü sadece tamsayılar üzerinde kullanılabilir. Kullanımı Şekil
4.35' te görüldüğü gibidir. Döngü parametreleri ve anlamları Çizelge 4.11'de
gösterilmiştir.
say (sayı değişken_adı : başlangıç .. bitiş , artış)
{
// kodlar
}
Şekil 4.35. say döngüsü kullanımı
Çizelge 4.11. say döngüsü parametreleri
Kod Anlamı
say Döngü deyimi sayı Döngünün sayı türünde sayacağını gösterir değişken_adı Döngü değişkenidir başlangıç Sayma işlemine başlanacak değer
.. (iki nokta yan yana) Sayma işleminde alt sınırın dahil üst sınırın dahil olmadığını gösterir. Hem alt sınırın hem üst sınırın dahil olması isteniyorsa üç nokta yan yana (...) kullanılmalıdır
bitiş Sayma işleminin biteceği tamsayı değerini gösterir , (virgül) Döngünün artış değerini belirlemek için kullanılır
artış Kullanımı zorunlu değildir. Kullanılmazsa artış değeri varsayılan olarak 1 alınır
42
4.16.2. İç içe say döngüsü
Bir döngünün kaç defa çalışacağı başka bir döngü tarafından kontrol edilmesi
gerekiyorsa iç içe say döngüsü kullanılmalıdır. Dıştaki döngü içteki döngüyü
döngü adedince çalıştırır. Kullanımı Şekil 4.36' da gösterilmiştir.
say (sayı a: başlangıç ... bitiş, artış)
{
say (sayı b: başlangıç ... bitiş, artış)
{
// kodlar
}
}
Şekil 4.36. İç içe say döngüsü kullanımı
4.16.3. tekrarla Döngüsü
Döngünün çalışmasının bir şarta bağlı olduğu durumlarda kullanılır. Şart doğru
olduğu sürece döngü tekrarlanır. İki farklı kullanımı vardır. Şekil 4.37' de
verilen kullanımda önce şart kontrol edilir sonra kodlar çalıştırılır. Şekil 4.38' de
verilen kullanımda ise önce kodlar çalıştırılır sonra şart kontrol edilir.
tekrarla <şart> ise
{
// kodlar
}
Şekil 4.37. Tekrarla döngüsü kullanımı - 1
43
tekrarla
{
// kodlar
} <şart> ise
Şekil 4.38. Tekrarla döngüsü kullanımı - 2
4.16.4. bitir, devam anahtar kelimeleri
Döngülerle kullanılabilen bitir ve devam anahtar kelimeleri döngünün gidişatını
değiştirmek için kullanılır. devam anahtar kelimesi döngünün bir sonraki adıma
geçmesini sağlarken bitir anahtar kelimesi döngüyü sonlandırır.
4.17. Fonksiyonlar
Fonksiyonlar bukalemun uygulamalarında belirli görevleri yerine getirmek için
yazılan kod bloklarıdır. Fonksiyon kullanmanın amacı, bazı program parçalarına
ana program veya alt programlar içerisinde birden fazla yerde ihtiyaç
duyulabilir. Bu gibi durumda kodu tekrar tekrar yazmaktansa fonksiyon olarak
yazılır ve istenildiği kadar kullanılır. Şekil 4.39' da kullanımı görülmektedir.
fonksiyon <fonksiyon_adı> (değişken_türü değişken_adı...)
{
// kodlar
}
Şekil 4.39. Fonksiyon tanımlama
44
4.17.1. Geriye değer döndüren fonksiyonlar
Fonksiyonlar yazılış amaçlarına göre yaptığı işlemin sonucunu fonksiyonun
çağrıldığı yere gönderebilir veya fonksiyon içerisinde kendisi ilgili yerlere
bildirebilir (ekrana, dosyaya yazmak veya yazıcıdan çıktı almak gibi). gönder
anahtar kelimesi fonksiyonun sonucunu çağrıldığı yere geri gönderir. Şekil 4.40'
da geriye değer döndüren fonksiyon tanımlaması görülmektedir.
fonksiyon <fonksiyon_adı> (değişken_türü değişken_adı...)
{
// kodlar
gönder sonuç;
}
Şekil 4.40. Geriye değer döndüren fonksiyon örneği
4.17.2. Dahili fonksiyonlar
Bukalemun içerisinde uygulamalara işlevsellik kazandırabilmek için daha
önceden tanımlanmış fonksiyonlar bulunur. Bu fonksiyonlara gerekli
parametreler gönderilerek kullanılırlar. Bukalemun dilindeki dahili
fonksiyonlar Çizelge 4.12' de gösterilmiştir.
Çizelge 4.12. Bukalemun dahili fonksiyonları
Fonksiyon Anlamı
uzunluk Parametre olarak gönderilen metinsel değişken veya verilerin kaç karakterden oluştuğunu geri gönderen fonksiyondur.
rastgele Rastgele sayı üretmek için kullanılan fonksiyondur. 0 (sıfır) ile parametre olarak verilen maksimum değer arasında rastgele sayı üreterek geri gönderir
rastgeleV 0 ile 1 arasında rastgele virgüllü sayı üretmek için kullanılır
ondalık Parametre olarak verilen virgüllü sayının tam kısmını atarak virgüllü kısmını geri gönderir.
yuvarla Virgüllü sayıları yuvarlamak için kullanılır. Buçuk ve üzeri sayılar yukarı, diğer sayılar aşağı yuvarlanır.
tamsayı Virgüllü sayıların tam kısmını almak için kullanılır tarihsaat Sistemin tarih ve saatini geri gönderir
45
ascii Parametre olarak gönderilen karakterin ascii kodunu geri gönderir
karakter Parametre olarak gönderilen sayının karakter karşılığını geri gönderir
metinböl Metin içerisinden istenen sayıda karakter almak için kullanılır
karekök Parametre olarak verilen sayının karekökünü alarak geri gönderir
karakteral Metin içerisinden 1 karakter almak için kullanılır
4.17.3. Tür dönüştürme fonksiyonları
Bukalemun dilinde kullanılabilen 5 temel tür vardır. Bunlar sayı, vsayı, metin,
karakter, doğruyanlış türleridir. Bu türler arasında dönüşüm atama işlemi
sırasında otomatik olarak yapılır. Ancak karşılaştırma işlemlerinde dönüşüm
işlemi otomatik olarak yapılamaz. Bu durumda tür adı yazılarak dönüştürülmek
istenilen veri parametre olarak gönderilir. Şekil 4.41' de otomatik olarak yapılan
bir tür dönüşümü örneği verilmiştir. Şekil 4.42'de ise fonksiyonla yapılan tür
dönüşüm örneği verilmiştir.
sayı a = "5";
Şekil 4.41. Otomatik olarak yapılan tür dönüşüm işlemi
sınıf fonksiyonlar { fonksiyon başla() { sayı a = 9; eğer a == sayı("9") ise yazA("1. şart doğru"); değilse yazA("1. şart yanlış"); eğer a == "9" ise yazA("2. şart doğru"); değilse yazA("2. şart yanlış"); } }
Şekil 4.42. Tür dönüşümü
46
4.17.4. Form uygulamalarına özel fonksiyonlar
Bukalemun ile programlanan uygulamalarda sadece form uygulamalarında
kullanılabilen özel fonksiyonlar vardır. Çizelge 4.13'te bu fonksiyonlar
gösterilmektedir.
Çizelge 4.13. Form uygulamalarına özgü fonksiyonlar
Fonksiyon Anlamı
mesaj Parametre olarak gönderilen değişken veya verileri yorumlayıcıya özgü mesaj penceresi ile ekranda gösterir
kapat Uygulamayı sonlandırmak için kullanılan fonksiyondur
4.18. Form Uygulamaları
Bukalemun ile konsol uygulamalarının yanında görsel uygulamalarda
oluşturulabilmektedir. Hazırlanan uygulamanın form uygulaması olduğunu
derleyiciye bildirmek için yapılması gereken BFE kullanılıyorsa form
uygulaması olarak derle seçeneği seçilir, komut satırı kullanılıyorsa "-form"
parametresi göndermek gerekir. Böylece derleyici derlenen dosyanın form
yorumlayıcının tanıdığı dosya uzantısı olan ".munf" uzantısı ile oluşturur.
4.18.1. oluştur Fonksiyonu
Uygulamaya form elemanı eklemek için kullanılan fonksiyon oluştur
fonksiyonudur. Fonksiyon 5 adet parametre alarak bukalemunun tanıdığı 3
form kontrolünü oluşturabilir. Kullanımı Çizelge 4.14' te, parametreleri ise
Çizelge 4.15'te gösterilmiştir.
Çizelge 4.14. Form elemanı oluşturma
oluştur(oluşturulacak_eleman_türü, eleman_adı, x, y, başlık);
47
Çizelge 4.15. Oluştur fonksiyonu parametreleri
Parametre Anlamı
oluşturulacak_eleman_türü "metinkutusu", "etiket", "düğme" değerlerini alabilen, form elemanının türünü belirleyen parametredir
eleman_adı oluşturulan elemana verilen isimdir. Elemana daha sonra ulaşmak için bu isim kullanılır
x Oluşturulan elemanın x koordinatı y Oluşturulan elemanın y koordinatı başlık Elemanın üzerinde yazan yazı
4.18.2. değiştir Fonksiyonu
Bukalemun uygulamalarında oluşturulan elemanların özelliklerini değiştirmek
için kullanılan fonksiyondur. Değiştir fonksiyonunun kullanımı Şekil 4.43' te,
parametreleri Çizelge 4.16' da, değiştirilebilecek özellikler ise Çizelge 4.17' de
gösterilmiştir.
değiştir(eleman_adı, özellik, yeni_değer);
Şekil 4.43. Değiştir fonksiyonu kullanımı
Çizelge 4.16. Değiştir fonksiyonu parametreleri
Parametre Anlamı
eleman_adı Özelliği değiştirilmek istenen elemanın adı Özellik Değiştirilmek istenen özellik yeni_değer Özelliğe atanacak yeni değer
Çizelge 4.17. Form kontrollerinde kullanılabilen özellikler
Özellik Tip Açıklama
x sayı Elemanın x koordinatını değiştirmek için kullanılır.
y sayı Elemanın y koordinatını değiştirmek için kullanılır.
yazı metin Eleman üzerinde yazan yazıyı değiştirmek için kullanılır.
tıklamaolayı metin Düğmeler için tıklanınca çalışacak olan
fonksiyonu belirlemek için kullanılır. genişlik sayı Elemanın genişliğini değiştirmek için kullanılır.
48
yükseklik sayı Elemanın yüksekliğini değiştirmek için
kullanılır.
yazıboyutu sayı Elemanın yazı boyutunu değiştirmek için
kullanılır.
4.18.3. özellik Fonksiyonu
Bukalemun uygulamalarında oluşturulan elemanların özelliklerini almak için
kullanılan fonksiyondur. Çizelge 4.17' de gösterilen özellikler için özelliğin
tipinde bir değişken tanımlanarak bu değişkene değerler atanabilir. Kullanımı
Şekil 4.44'te gösterilmiştir.
özellik_tipi değişken_adı = özellik(eleman_adı, özellik_adı);
Şekil 4.44. Özellik fonksiyonu kullanımı
49
5. ARAŞTIRMA BULGULARI
Bukalemun dili değişkenleri, operatörleri, deyimleri ve fonksiyonlarıyla
uygulama yazmaya hazır bir dildir. C# dili ile yazılan Bukalemun Framework
Editör ile kodlar hazırlanır ve Delphi dili ile yazılan derleyiciye gönderilir.
Derleyici yaptığı analizler sonucunda hata yoksa uzantısı konsol uyguları için
".mun", form uygulamaları için ise ".munf" olan çıktı dosyasını oluşturur.
Oluşturulan dosya istenilen platformlara taşınarak yorumlayıcılar tarafından
yorumlanarak kodların sonuçları ekranda gösterilir. Bukalemun dili kullanılarak
oluşturulan örnek uygulamaların kodları ve ekran görüntülerini bu bölümdedir.
5.1. Cümle Analizi
Bir metin kutusu, iki etiket ve bir düğme ile oluşturulan uygulamada, metin
kutusuna girilen cümledeki kelimeler analiz edilerek küçük harfle başlayan bir
kelime ise ilk harflerini büyük harfe çeviren program. Programın kodları EK - 1
de verilmiştir. Şekil 5.1' de uygulamanın windows ortamındaki ekran
görüntüsü, Şekil 5.2' de ise IOS ve Android ortamlarındaki ekran görüntüleri
verilmiştir.
Şekil 5.1. Cümle analizi örneği için windows form ekran görüntüsü
Şekil 5.2. Cümle analizi örneğinin Android ve IOS için ekran görüntüsü
50
Cümle analizi örneğinin Android ve IOS için ekran görüntüsü
Cümle analizi örneğinin Android ve IOS için ekran görüntüsü
5.2. İstenilen Aralıkta Rastgele Sayı Üreten Program
Bu uygulama ile istenilen aralıkta rastgele sayı üretilir.
alt ve üst sınır değerlerine göre
belirlenir. Programın kodları EK
windows ortamındaki
ortamlarındaki ekran
Şekil 5.3. Rastgele sayı üreten programın windows ekran görüntüsü
51
İstenilen Aralıkta Rastgele Sayı Üreten Program
Bu uygulama ile istenilen aralıkta rastgele sayı üretilir. Metin
alt ve üst sınır değerlerine göre üretilecek sayının hangi aralıkta olacağı
Programın kodları EK - 2 de verilmiştir. Şekil 5.3
windows ortamındaki ekran görüntüsü, Şekil 5.4' te ise
ortamlarındaki ekran görüntüleri verilmiştir.
astgele sayı üreten programın windows ekran görüntüsü
Metin kutularına girilen
üretilecek sayının hangi aralıkta olacağı
Şekil 5.3' te uygulamanın
e ise IOS ve Android
astgele sayı üreten programın windows ekran görüntüsü
Şekil 5.4. Rastgele sayı üreten programın Android ve IOS
görüntüleri
52
astgele sayı üreten programın Android ve IOS ortamlarındaki
leri
ortamlarındaki ekran
5.3. Girilen Sayıyı Üçerli Ayırarak Yazan Program
Metinkutusuna girilen sayıyı 3'erli ayırarak
Programın kodları EK
ortamındaki ekran görüntüsü
ekran görüntüleri verilmiştir
Şekil 5.5. Sayıyı üçerli ayırarak yazan program windows ekran görüntüsü
53
. Girilen Sayıyı Üçerli Ayırarak Yazan Program
Metinkutusuna girilen sayıyı 3'erli ayırarak para birimi şeklinde
Programın kodları EK - 3'te verilmiştir. Şekil 5.5'te uygulamanın windows
ekran görüntüsü, Şekil 5.6'da ise IOS ve Android
verilmiştir.
ayıyı üçerli ayırarak yazan program windows ekran görüntüsü
para birimi şeklinde yazan program.
uygulamanın windows
ise IOS ve Android ortamlarındaki
ayıyı üçerli ayırarak yazan program windows ekran görüntüsü
Şekil 5.6. Girilen sayıyı para
Android ve IOS ekran görüntüleri
54
Girilen sayıyı para birimine çevirerek 3'erli ayıran program için
Android ve IOS ekran görüntüleri
birimine çevirerek 3'erli ayıran program için
55
5.4. Sayı Tahmin Oyunu
Yeni oyuna basıldıktan sonra program 1 ile 100 arasında rastgele bir sayı tutar
ve kullanıcıyı yönlendirerek bu sayıyı bulmasını sağlar. Programın kodları EK -
4'te verilmiştir. Şekil 5.7'de uygulamanın windows ortamındaki ekran
görüntüsü, Şekil 5.8'de ise IOS ve Android ortamlarındaki ekran görüntüleri
verilmiştir.
Şekil 5.7. Sayı tahmin oyunu windows ekran görüntüsü
Şekil 5.8. Sayı tahmin oyunu Android ve IOS ekran görüntüsü
56
Sayı tahmin oyunu Android ve IOS ekran görüntüsü
Sayı tahmin oyunu Android ve IOS ekran görüntüsü
5.5. Sayısal Loto Programı
Her tahmin et düğmesine tıklandığında 6 adet 1 ile 49 arasında rastgele sayıyı
ekrana yazan program.
uygulamanın windows ortamındaki
Android ortamlarındaki ekran görüntüleri
Şekil 5.9.
57
. Sayısal Loto Programı
Her tahmin et düğmesine tıklandığında 6 adet 1 ile 49 arasında rastgele sayıyı
ekrana yazan program. Programın kodları EK - 5'te verilmiştir.
uygulamanın windows ortamındaki ekran görüntüsü, Şekil 5.10
ortamlarındaki ekran görüntüleri verilmiştir.
. Sayısal loto programı windows ekran görüntüsü
Her tahmin et düğmesine tıklandığında 6 adet 1 ile 49 arasında rastgele sayıyı
5'te verilmiştir. Şekil 5.9'da
Şekil 5.10'da ise IOS ve
ekran görüntüsü
Şekil 5.10. Sayısal loto programı Android ve IOS ekran görüntüleri
58
Sayısal loto programı Android ve IOS ekran görüntüleri
Sayısal loto programı Android ve IOS ekran görüntüleri
5.6. XOX Oyunu
2 oyuncu ile oynanan XOX oyununda her oyuncu 9 adet düğmeden birine
tıklayarak yatayda dikeyde veya çaprazda kendine
getirerek oyunu kazanır.
uygulamanın windows ortamındaki
Android ortamlarındaki ekran görüntüleri
Şekil 5.
59
2 oyuncu ile oynanan XOX oyununda her oyuncu 9 adet düğmeden birine
tıklayarak yatayda dikeyde veya çaprazda kendine ait simgeleri yan yana
getirerek oyunu kazanır. Programın kodları EK - 6'da verilmiştir.
uygulamanın windows ortamındaki ekran görüntüsü, Şekil 5.12
d ortamlarındaki ekran görüntüleri verilmiştir.
Şekil 5.11. XOX oyunu windows ekran görüntüsü
2 oyuncu ile oynanan XOX oyununda her oyuncu 9 adet düğmeden birine
ait simgeleri yan yana
6'da verilmiştir. Şekil 5.11'de
Şekil 5.12'de ise IOS ve
XOX oyunu windows ekran görüntüsü
Şekil 5.12
60
12. XOX oyunu Android ve IOS ekran görüntüleri
u Android ve IOS ekran görüntüleri
5.7. Hesap Makinesi
Form uygulaması olarak oluşturulan hesap makinesinde toplama, çıkarma,
çarpma, bölme, mod ve üs alma
7'de verilmiştir. Şekil 5.13
görüntüsü, Şekil 5.14
verilmiştir.
Şekil 5.13. Hesap makinesi programı için windows ekran görüntüsü
61
. Hesap Makinesi
Form uygulaması olarak oluşturulan hesap makinesinde toplama, çıkarma,
çarpma, bölme, mod ve üs alma işlemleri yapılabiliyor. Programın kodları EK
Şekil 5.13'te uygulamanın windows ortamındaki
Şekil 5.14'te ise IOS ve Android ortamlarındaki ekran görüntüleri
Hesap makinesi programı için windows ekran görüntüsü
Form uygulaması olarak oluşturulan hesap makinesinde toplama, çıkarma,
Programın kodları EK -
uygulamanın windows ortamındaki ekran
ortamlarındaki ekran görüntüleri
Hesap makinesi programı için windows ekran görüntüsü
Şekil 5.14. Hesap makinesi programı için Android ve IOS ekran
62
Hesap makinesi programı için Android ve IOS ekran
Hesap makinesi programı için Android ve IOS ekran görüntüsü
63
6. SONUÇ VE ÖNERİLER
Programlama öğrenilmesi zorlu bir süreçtir. Bu süreçte öğrenilen dilin anahtar
kelimelerinin anlamlarını ve yazım kurallarını bilmek gerekir. Bu da
programlama mantığının yanında bazı parametrelerinde öğrenilmesini zorunlu
kılar. Bu çalışmada ise oluşturulan dil tamamen Türkçe anahtar kelimelerden
oluşur ve kodlaması Türkçe dilbilgisi yapısına uygundur. Bundan dolayı
programlama mantığını anlamaya çalışanlara başlangıç seviyesinde faydalı
olacaktır. Aynı zamanda herkesin programlama ihtiyacı farklı platformda
olabilir. Bir kişi IOS için kod yazmak isterken bir başkası Android için kod
yazmak isteyebilir. Bu dil herkesin ihtiyacına cevap verebilecek yapıdadır.
Platform bağımsız olması sebebiyle yazılan kodlar IOS, Android ve Windows
platformlarında çalıştırılabilir.
Programcı Bukalemun Editör ile kodlarını yazar. Windows Konsol veya form
uygulaması olarak derleme işlemini yapar. Derleyici kodları analiz eder. Eğer
hata varsa hatanın oluğu satır numarası ve hatanın ne olduğu programcıya
bildirilir ve derleme işlemi durdurulur. Hata yoksa analiz edilen kodlara göre bir
çıktı oluşturulur. Oluşturulan bu dosya Windows, IOS ve Android cihazlarda
yorumlanarak çalıştırılabilir.
İleride yapılacak olan çalışmalarda daha fazla kütüphane ve görsel eleman
oluşturulabilir. Böylece yazılan uygulamalar görsellik olarak daha iyi
seviyelerde olacaktır. Platform bağımsızlığı olarak farklı platformlara da
yorumlayıcılar yazılarak çalıştırılan platform sayısı arttırılabilir.
Sonuç olarak herhangi bir platform için yazılan uygulamaların diğer
platformlarda çalışabilmesi için ekstra zaman ve maliyete gereksinim vardır. Bu
gibi durumlarda platform bağımsız uygulamalar ile hazırlanan yazılımlar bir
defa yazılır ve diğer platformlarda çalıştırılır. Böylece hem zaman hem de
maliyet yönünden yapılacak zarar önlenmiş olur. Bu çalışmanın platform
bağımsız uygulamalara ışık tutması beklenmektedir.
64
KAYNAKLAR
Andrade, P., R., M., Albuquerque, A., B., 2015. Cross Platform App A Comparative
Study. International Journal of Computer Science & Information Technology, February 2015
Atasoy, H., 2011. Shunting Yard Algoritması. Erişim Tarihi: 12.11.2015 http://www.atasoyweb.net/Shunting-Yard-Algoritmasi Bilgiler Sitesi, 2012. Bilişim Teknolojisi Hangi Alanları Kapsar, Kapsadığı Alanlar
Nelerdir. Erişim Tarihi: 03.01.2016. http://www.bilgilersitesi.com/bilisim-teknolojisi-hangi-alanlari-kapsar-kapsadigi-alanlar-nelerdir-ornekler.html
Bouras, C., Papazois, A., Stasinos, N., 2014. A Framework for Cross-platform
Mobile Web Applications Using HTML5. International Conference on Future Internet of Things and Cloud
Ersoy, H., Madran R. O., Gülbahar Y., 2011. Programlama Dilleri Öğretimine Bir
Model Önerisi: Robot Programlama. Başkent Üniversitesi, Akademik Bilişim Konferansı Bildirileri, 731-736.
Eğitim Takvimi, 2016. Native, Mobil veya Hibrid: Mobil Uygulama Geliştirme
Teknolojisi Seçerken Nelere Dikkat Etmeliyiz? Erişim Tarihi: 03.01.2016. https://www.egitimtakvimi.com/EgitimTakvimi/Makale/12/Native-Mobil-veya-Hibrid-Mobil-Uygulama-Gelistirme-Teknolojisi-Secerken-Nelere-Dikkat-Etmeliyiz
Guangtai, L., Wang, J., Li, S., Chang, R., 2014. A Pattern-Based Bug Detector for
Cross-Platform Mobile Applications. IEEE International Conferenceon Mobile Services.
Hermansson, C., S¨oderstr¨om, M., Johansson, D., 2014. Developing useful mobile
applications in cross media platforms. Eighth International Conference on Innovative Mobile and Internet Services in Ubiquitous Computing.
JQuery Mobile, 2015. JQuery Mobile Hakkında. Erişim Tarihi: 30.12.2015.
https://jquerymobile.com/about/ Karlı, G., 2014. Cross-Platform Mobıle Development. Dokuz Eylül Üniversitesi,
Yüksek Lisans Tezi, 70s, İzmir. Kılıçaslan, Y., 2006a. Lexical Analysis. Erişim Tarihi: 25.10.2015
http://yilmazkilicaslan.trakya.edu.tr/teaching/lexical_analysis.ppt Kılıçaslan, Y., 2006b. Syntax Analysis. Erişim Tarihi: 30.10.2015
http://yilmazkilicaslan.trakya.edu.tr/teaching/syntax_analysis.ppt
65
Küçük, F., 2008. Özelleştirilebilir İmlaya Sahip Yeni Ve EsnekNesne Tabanlı Bir Programlama Dili Geliştirme. Düzce Üniversitesi, Fen Bilimleri Enstitüsü, Yüksek Lisans Tezi, 179s, Düzce.
Nivedha, R., Dhipikaasri, D., Sunilkumar, C., Vasudevan, S., Karthikeyan, P., 2014.
A Mobile App in Cross Platform: G3 - Gain Grip for GRE. IEEE Sixth International Conference on Technology for Education
Özözer, Ö., Y., Rakıcı, G., A., 2010. Bilim ve Teknoloji. Palmieri, M., 2012, Comparison of cross-platform mobile development tools. Erişim Tarihi: 02.11.2015
http://ieeexplore.ieee.org/xpl/articleDetails.jsp?tp=&arnumber=6376023&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D6376023
Rhomobile, 2015. Rhomobile Hakkında. Erişim Tarihi:30.12.2015.
http://rhomobile.com/ Ribeiro, A., Silva, A., R., 2012. Survey on Cross-Platforms and Languages for
Mobile Apps. Şeker, Ş., E., 2008a. Derleyici (compiler). Erişim Tarihi: 25.10.2015
http://bilgisayarkavramlari.sadievrenseker.com/2008/01/03/derleyici-compiler/
Şeker, Ş., E., 2008b. Lex. Erişim Tarihi: 25.10.2015
http://www.bilgisayarkavramlari.com/2008/12/12/lex/ Wafaa, S., K., Bassem, A., A., Ahmed, H., Y., Ayman, M., W., 2015. Taxonomy of
Cross-Platform Mobile Applications Development Approaches. Ain Shams University, Ain Shams Engineering Journal.
Wahyu, Y., Suhardi, 2014. Detecting Plagiarism in Cross-Platform Mobile
Applications. International Conference on Information Technology Systems and Innovation
Wikipedia, 2014. Derleyici. Erişim Tarihi: 24.10.2015 https://tr.wikipedia.org/wiki/Derleyici Wikipedia, 2015. Programlama Dili. Erişim Tarihi: 24.10.2015.
https://tr.wikipedia.org/wiki/Programlama_dili Wikipedia, 2015. Yorumlanan programlama dili. Erişim Tarihi:
02.11.2015https://tr.wikipedia.org/wiki/Yorumlanan_programlama_dili Wikipedia, 2013. Bilgisayar platformu. Erişim Tarihi: 02.11.2015
https://tr.wikipedia.org/wiki/Bilgisayar_platformu
66
Wikipedia, 2014. MoSync. Erişim Tarihi: 03.11.2015 https://en.wikipedia.org/wiki/MoSync
Wikipedia, 2015. RhoMobile Suite. Erişim Tarihi: 03.11.2015.
https://en.wikipedia.org/wiki/RhoMobile_Suite Varlık, H., 2014. PhoneGap Nedir, Yenir Mi? Erişim Tarihi: 02.11.2015.
https://gelecegiyazanlar.turkcell.com.tr/blog/phonegap-nedir-yenir-mi Zengin, E., 2010. Derleyicilerin Yapısı. Erişim Tarihi: 25.10.2015.
http://www.bilisimdergi.com/Derleyicilerin-Yapisi-14-9.html
67
ÖZGEÇMİŞ
Adı Soyadı :İbrahim KURU Doğum Yeri ve Yılı : Antalya, 1984 Medeni Hali : Evli Yabancı Dili : İngilizce E-posta : [email protected] Eğitim Durumu Lise : Antalya Teknik Lisesi, 2003 Lisans : SDÜ, Teknik Eğitim Fakültesi, Bilgisayar Sistemleri
Öğretmenliği Mesleki Deneyim Milli Eğitim Bakanlığı 2011-……. (Halen)
68
EK 1 - Cümle Analizi Programı Kodları
sınıf cümleanalizi
{
fonksiyon başla()
{
sayı y = 40;
oluştur("etiket", "e1", 10, y, "Bir Metin Giriniz");
y = özellik("e1", "y") + özellik("e1", "yükseklik") + 5;
oluştur("metinkutusu", "m1", 10, y, "");
y = özellik("m1", "y") + özellik("m1", "yükseklik") + 5;
değiştir("m1", "genişlik", 200);
oluştur("düğme", "d1", 10, y, "Analiz");
değiştir("d1","tıklamaolayı", "analiz");
y = özellik("d1", "y") + özellik("d1", "yükseklik") + 5;
oluştur("etiket", "e2", 10, y, "");
y = özellik("e2", "y") + özellik("e2", "yükseklik") + 5;
}
fonksiyon analiz(metin e)
{
metin veri = özellik("m1", "yazı");
metin sonuç = "";
sayı u = uzunluk(veri);
doğruyanlış boşluk = doğru;
say (sayı i:0..u)
{
karakter k = karakteral(veri, i);
sayı a = ascii(k);
69
eğer a >= 97 ve a <= 122 ve boşluk ise
a -= 32;
sonuç += karakter(a);
eğer a == 32 ise
boşluk = doğru;
değilse boşluk = yanlış;
}
değiştir("e2", "yazı", sonuç);
}
}
70
EK 2 - Rastgele Sayı Üreten Program Kodları
sınıf rastgeleSayı
{
fonksiyon başla()
{
elemanlarıekle();
}
fonksiyon elemanlarıekle()
{
oluştur("etiket", "e0", 10, 15, "Rastgele Sayı
Programı");
değiştir("e0", "yazıboyutu", 20);
sayı y = 50;
oluştur("etiket", "e1", 10, y, "Alt Sınır");
y = özellik("e1", "y") + özellik("e1", "yükseklik")
+ 5;
oluştur("metinkutusu", "m1", 10, y, "");
y = özellik("m1", "y") + özellik("m1", "yükseklik")
+ 5;
oluştur("etiket", "e2", 10, y, "Üst Sınır");
y = özellik("e2", "y") + özellik("e2", "yükseklik")
+ 5;
oluştur("metinkutusu", "m2", 10, y, "");
y = özellik("m2", "y") + özellik("m2", "yükseklik")
+ 5;
oluştur("düğme", "d1", 10, y, "Rastgele Sayı");
y = özellik("d1", "y") + özellik("d1", "yükseklik")
+ 5;
oluştur("etiket", "e3", 10, y, "--");
y = özellik("e3", "y") + özellik("e3", "yükseklik")
+ 5;
değiştir("d1", "tıklamaolayı", "sayıbul");
değiştir("e3", "yazıboyutu", 25);
}
fonksiyon sayıbul(metin e)
{
71
eğer özellik("m1", "yazı") == "" veya özellik("m2",
"yazı") == "" ise
mesaj("Alt sınır ve üst sınır değerlerini
giriniz.");
değilse
{
sayı alt = özellik("m1", "yazı");
sayı üst = özellik("m2", "yazı");
üst++;
sayı r = rastgele(üst - alt) + alt;
değiştir("e3", "yazı", metin(r));
}
}
}
72
EK 3 - Girilen Parayı 3'er Ayırarak Yazan Program Kodları
sınıf paraayır
{
fonksiyon başla()
{
sayı y = 30;
oluştur("etiket", "e1", 10, y, "Para Miktarını
Giriniz");
y = özellik("e1", "y") + özellik("e1", "yükseklik")
+ 30;
oluştur("metinkutusu", "m1", 10, y, "");
y = özellik("m1", "y") + özellik("m1", "yükseklik")
+ 5;
oluştur("düğme", "d1", 10, y, "Çevir");
değiştir("d1","tıklamaolayı", "çevir");
y = özellik("d1", "y") + özellik("d1", "yükseklik")
+ 5;
oluştur("etiket", "e2", 10, y, "---");
y = özellik("e2", "y") + özellik("e2", "yükseklik")
+ 5;
değiştir("e1", "yazıboyutu", 26);
}
fonksiyon çevir(metin e)
{
metin m = özellik("m1", "yazı");
eğer m == "" ise
{
mesaj("Para miktarını giriniz..");
gönder;
}
değilse
{
sayı s = uzunluk(m) - 1;
metin sonuc = "";
sayı kontrol = 0;
say (sayı x: s...0, -1)
{
kontrol++;
eğer kontrol % 3 == 0 ise
73
sonuc = "." + karakteral(m, x) +
sonuc;
değilse
sonuc = karakteral(m, x) + sonuc;
}
eğer karakteral(sonuc,0) == '.' ise
sonuc = metinböl(sonuc, 1);
değiştir("e2", "yazı", sonuc + " TL");
}
}
}
74
EK 4 - Sayı Tahmin Oyunu Kodları
sınıf oyun
{
sayı tutulan;
sayı denemesayısı;
doğruyanlış oyunbaşladı;
fonksiyon başla()
{
ilkayarlar();
yenioyun("");
}
fonksiyon ilkayarlar()
{
sayı y = 50;
oluştur("düğme", "d1", 10, y, "Yeni Oyun");
değiştir("d1","tıklamaolayı", "yenioyun");
y = özellik("d1", "y") + özellik("d1", "yükseklik")
+ 5;
oluştur("etiket", "eBilgi", 10, y, "Tahmininizi
giriniz!");
y = özellik("eBilgi", "y") + özellik("eBilgi",
"yükseklik") + 5;
oluştur("metinkutusu", "mTahmin", 10, y, "");
y = özellik("mTahmin", "y") + özellik("mTahmin",
"yükseklik") + 5;
oluştur("düğme", "d2", 10, y, "Tahmin Et");
değiştir("d2","tıklamaolayı", "tahminet");
y = özellik("d2", "y") + özellik("d2", "yükseklik")
+ 5;
oluştur("etiket", "eSonuç", 10, y, "");
y = özellik("eSonuç", "y") + özellik("eSonuç",
"yükseklik") + 5;
}
fonksiyon yenioyun(metin e)
{
değiştir("eSonuç", "yazı", "Yeni oyun başladı.");
tutulan = rastgele(100) + 1;
denemesayısı = 0;
oyunbaşladı = doğru ;
}
75
fonksiyon tahminet(metin e)
{
eğer !oyunbaşladı ise
{
değiştir("eSonuç", "yazı", "Oynamak için yeni
oyuna basınız.");
gönder ;
}
eğer özellik("mTahmin", "yazı") == "" ise
{
mesaj("Tahminizi giriniz.");
gönder ;
}
sayı yazılan = özellik("mTahmin", "yazı");
denemesayısı++;
eğer tutulan < yazılan ise
{
değiştir("eSonuç", "yazı", "Daha küçük bir
sayı giriniz.");
}
değilse eğer tutulan > yazılan ise
{
değiştir("eSonuç", "yazı", "Daha büyük bir
sayı giriniz.");
}
değilse
{
metin m = "Tebrikler " + denemesayısı + "
denemede buldunuz.";
değiştir("mSonuç", "yazı", m);
mesaj(m);
oyunbaşladı = yanlış ;
}
}
}
76
EK 5 - Sayısal Loto Kodları
sınıf sayısalloto
{
fonksiyon başla()
{
elemanlarıekle();
}
fonksiyon elemanlarıekle()
{
sayı y = 20;
oluştur("etiket", "e1", 10, y, "Sayısal Loto");
y = özellik("e1", "y") + özellik("e1", "yükseklik")
+ 5;
oluştur("düğme", "d1", 10, y, "Yeni Tahmin");
değiştir("d1","tıklamaolayı", "tahminet");
y = özellik("d1", "y") + özellik("d1", "yükseklik")
+ 5;
ust = y;
}
sayı ust;
sayı adet = 1;
fonksiyon tahminet(metin e)
{
oluştur("etiket", "sonuc" + adet, 10, ust, "---");
ust = özellik("sonuc" + adet, "y") +
özellik("sonuc" + adet, "yükseklik") + 5;
metin m = "";
say (sayı a:1...6)
{
sayı s = rastgele(49) + 1;
m += " " + s;
}
değiştir("sonuc" + adet, "yazı", m);
77
adet++;
}
}
78
EK 6 - XOX Oyunu Kodları
sınıf xox
{
doğruyanlış birincioyuncu;
sayı hamle;
doğruyanlış oyunbitti;
metin bos = "_";
fonksiyon başla()
{
değiştir("form", "yazı", "XOX");
elemanolustur();
birincioyuncu = hayır;
hamle = 9;
oyunbitti = yanlış;
}
fonksiyon elemanolustur()
{
sayı x,y;
x = 10;
y = 30;
sayı genişlik, yükseklik, etiketmesafesi, btn_yazı,
btn_yeni_genişlik;
genişlik = özellik("form", "genişlik") - 40;
genişlik = genişlik / 3;
yükseklik = genişlik;
eğer platform == "ios" ise
{
etiketmesafesi = 15;
btn_yazı = 20;
btn_yeni_genişlik = 190;
}
değilseeğer platform == "win form" ise
{
genişlik = 60;
yükseklik = 60;
etiketmesafesi = 20;
btn_yazı = 20;
79
btn_yeni_genişlik = 190;
}
değilseeğer platform == "android" ise
{
genişlik = 110;
yükseklik = 110;
etiketmesafesi = 30;
btn_yazı = 30;
btn_yeni_genişlik = 350;
}
say (sayı a:1...3)
{
say(sayı b:1...3)
{
metin eleman;
eleman = "d" + a + b;
oluştur("düğme", eleman, x, y, bos);
değiştir(eleman, "genişlik", genişlik);
değiştir(eleman, "yükseklik",
yükseklik);
değiştir(eleman, "yazıboyutu",
btn_yazı);
değiştir(eleman, "tıklamaolayı",
"tıkla");
x += genişlik + 5;
}
y += yükseklik + 5;
x = 10;
}
değiştir("form", "genişlik", 230);
değiştir("form", "yükseklik", 350);
oluştur("etiket", "lblSıra", 20, y, "Sıra: 1.
oyuncuda");
değiştir("lblSıra","yazıboyutu", 14);
y += etiketmesafesi + 10;
oluştur("düğme", "btnYeniOyun", 10, y, "Yeni
Oyun");
80
değiştir("btnYeniOyun", "genişlik",
btn_yeni_genişlik);
değiştir("btnYeniOyun", "yükseklik", 45);
değiştir("btnYeniOyun", "yazıboyutu", 14);
değiştir("btnYeniOyun", "tıklamaolayı",
"yenioyun");
}
fonksiyon yenioyun(metin elemanadi)
{
değiştir("d11", "yazı", bos);
değiştir("d12", "yazı", bos);
değiştir("d13", "yazı", bos);
değiştir("d21", "yazı", bos);
değiştir("d22", "yazı", bos);
değiştir("d23", "yazı", bos);
değiştir("d31", "yazı", bos);
değiştir("d32", "yazı", bos);
değiştir("d33", "yazı", bos);
değiştir("lblSıra", "yazı", "Sıra: 1. oyuncuda");
birincioyuncu = hayır;
hamle = 9;
oyunbitti = hayır;
}
fonksiyon kontrol()
{
say (sayı satir:1...3)
{
metin okunan1 = "";
metin okunan2 = "";
say (sayı sutun: 1...3)
{
metin e1 = "d" + satir + sutun;
metin e2 = "d" + sutun + satir;
okunan1 += özellik(e1, "yazı");
okunan2 += özellik(e2, "yazı");
}
81
eğer okunan1 == "OOO" veya okunan1 == "XXX"
ise
{
mesaj(metinböl(okunan1,0,1) , "
kazandı.");
oyunbitti = evet;
}
eğer okunan2 == "OOO" veya okunan2 == "XXX"
ise
{
mesaj(metinböl(okunan2,0,1), "
kazandı.");
oyunbitti = evet;
}
}
metin okunan3 = ""; //çapraz kontrol
okunan3 = özellik("d11", "yazı") + özellik("d22",
"yazı") +
özellik("d33", "yazı");
metin okunan4 = "";
okunan4 = özellik("d13", "yazı") + özellik("d22",
"yazı") +
özellik("d31", "yazı");
eğer okunan3 == "OOO" veya okunan3 == "XXX" ise
{
mesaj(metinböl(okunan3,0,1), " kazandı.");
oyunbitti = evet;
}
eğer okunan4 == "OOO" veya okunan4 == "XXX" ise
{
mesaj(metinböl(okunan4,0,1), " kazandı.");
oyunbitti = evet;
}
eğer oyunbitti== hayır ve hamle==0 ise
{
oyunbitti = evet;
mesaj("kimse kazanamadı.");
}
82
eğer oyunbitti ise
değiştir("lblSıra", "yazı", "");
}
fonksiyon tıkla(metin elemanadi)
{
eğer oyunbitti == yanlışise
eğer özellik(elemanadi, "yazı") == bos ise
{
metin işaret = "O";
eğer !birincioyuncu ise
{
işaret = "X";
değiştir("lblSıra", "yazı", "Sıra:
2. oyuncuda");
}
değilse
{
değiştir("lblSıra", "yazı", "Sıra:
1. oyuncuda");
}
birincioyuncu = !birincioyuncu;
değiştir(elemanadi, "yazı", işaret);
hamle--;
kontrol();
}
}
}
83
EK 7 - Bukalemun Hesap Makinesi Programı Kodları
sınıf winform
{
sayı yatay, dikey;
sayı btnGenişlik;
vsayı sayı1, sayı2;
fonksiyon başla()
{
eğer platform == "android" ise
{
yatay = 65;
dikey = 50;
btnGenişlik = 70;
}
değilseeğer platform == "ios" ise
{
yatay = 50;
dikey = 50;
btnGenişlik = 45;
}
değilse
{
yatay = 55;
dikey = 30;
btnGenişlik = 53;
}
ilklemeler();
}
fonksiyon ilklemeler()
{
sayı x = 30, y = 50;
oluştur("etiket", "lbl0", 30, 15, "Bukalemun Hesap
Makinesi");
değiştir("lbl0", "yazıboyutu", 20);
oluştur("etiket", "lbl1", x, y, "1. Sayı");
oluştur("etiket", "lbl2", x, y + dikey, "2. Sayı");
84
oluştur("etiket", "lbl3", x, y + dikey * 2,
"Sonuç");
oluştur("metinkutusu", "txt1", x + yatay, y, "10");
oluştur("metinkutusu", "txt2", x + yatay, y +
dikey, "3");
oluştur("etiket", "lblSonuç", x + yatay, y + dikey
* 2 - 5, "0");
y += dikey * 3;
oluştur("düğme", "btn1", x + yatay * 0, y,
"Topla");
oluştur("düğme", "btn2", x + yatay * 1, y,
"Çıkar");
oluştur("düğme", "btn3", x + yatay * 2, y, "Çarp");
oluştur("düğme", "btn4", x + yatay * 3, y, "Böl");
oluştur("düğme", "btn5", x + yatay * 4, y, "Mod");
oluştur("düğme", "btn6", x + yatay * 5, y, "Üssü");
y += dikey + 10;
oluştur("etiket", "lblProgramcı", x, y, "İbrahim
KURU");
değiştir("lbl1", "yazıboyutu", 14);
değiştir("lbl2", "yazıboyutu", 14);
değiştir("lbl3", "yazıboyutu", 14);
değiştir("lblSonuç", "yazıboyutu", 18);
değiştir("txt1", "genişlik", 150);
değiştir("txt2", "genişlik", 150);
değiştir("lblSonuç", "genişlik", 350);
değiştir("btn1", "tıklamaolayı", "topla");
değiştir("btn2", "tıklamaolayı", "çıkar");
değiştir("btn3", "tıklamaolayı", "çarp");
değiştir("btn4", "tıklamaolayı", "böl");
değiştir("btn5", "tıklamaolayı", "mod");
değiştir("btn6", "tıklamaolayı", "üssü");
say(sayı i:1...6)
{
85
metin elemanadı = "btn" + i;
değiştir(elemanadı, "genişlik",
btnGenişlik);
}
değiştir("form", "genişlik", 400);
değiştir("form", "yükseklik", 250);
değiştir("form", "yazı", "Bukalemun Hesap
Makinesi");
}
fonksiyon sayılarıal()
{
sayı1 = özellik("txt1", "yazı");
sayı2 = özellik("txt2", "yazı");
}
fonksiyon topla(metin elemanadi)
{
sayılarıal();
metin c = sayı1 + sayı2;
değiştir("lblSonuç","yazı",c);
}
fonksiyon çıkar(metin elemanadi)
{
sayılarıal();
metin c = sayı1 - sayı2;
değiştir("lblSonuç","yazı",c);
}
fonksiyon çarp(metin elemanadi)
{
sayılarıal();
metin c = sayı1 * sayı2;
değiştir("lblSonuç","yazı",c);
}
fonksiyon böl(metin elemanadi)
{
86
sayılarıal();
metin c = sayı1 / sayı2;
değiştir("lblSonuç","yazı",c);
}
fonksiyon mod(metin elemanadi)
{
sayılarıal();
sayı s1 = sayı1;
sayı s2 = sayı2;
metin c = s1 % s2;
değiştir("lblSonuç","yazı",c);
}
fonksiyon üssü(metin elemanadi)
{
sayılarıal();
sayı u;
u=sayı2;
metin c = sayı1 ** u;
değiştir("lblSonuç","yazı",c);
}
}