Konuşur gibi Türkçe Kod #14: Satır Testi

##1. Bölüm: Türkçe kodlama | ##2. Bölüm: TAR-Python ayarları
##3.Bölüm: kendi .tr uzantımız | ##4. Bölüm: Dil = KARAKTER yorumlayıcısı
##5. Bölüm: Donanım Sürücüleri | ##6. Bölüm: Kendi YAZ komutumuz
##7. Bölüm: Tüm harfleri 1 değişkene atama | ##8. Bölüm: Kendi komutlarımız
##9. Bölüm: YAZ’ma şekilleri + Teknoloji Oteli | ##10. Bölüm: Tırnak
##11. Bölüm: Burası Mühim | ##12. Bölüm: Yeni Satır
##13. Bölüm: İki Satır


Hatırlarsanız İki Satır muhabbet edelim 😉 derken YAZ komutumuz ilk seferinde doğru çalışırken, ikinci seferinde doğru çalışmamıştı. Satır atlama sorununu çözünce de başka bir sorunumuz devam etmişti, cümle değişkenimizin içini silip, yeni karşılaşacağı tırnak sonrasındaki harfleri yakalaması için ayarlamıştık.

Ve istediğimiz sonucu almıştık.


 

Bir önceki konudaki çukura denk gelmemek için isterseniz yeniden testler yapalım. En basitinden 3. satırı eklersek ne olacak, 4. satırı eklersek ne olacak bakalım.

3 satır için sonucu görelim

Şansa olmadı inşallah, garantilemek için bir de 4. satırı sonrası bakalım.

 

Güzel.

Biraz abartalım ve farklı şeyler deneyelim. Mesela programcı alt satıra değil de hemen yan tarafa yeniden bir yaz komutu isterse ne olacak? Hem alta hem yana yazıp görelim.

yaz "+Merhaba Dünya"
yaz "+Nasılsın?"
yaz "-İyiyim"
yaz "-Sen nasılsın?" yaz "-Orada havalar sıcak mı?" yaz "-Burası fena"
yaz "-Hiç kış gibi değil"

Ok.

Peki javascript ya da python gibi pek dildeki noktalı virgül olayına bakalım. Alışkanlık bu ya, art arda birkaç komut yazarken aralarına noktalı virgül ; koyarsa..

bakalım..

Hadi hayırlı olsun  İlk noktalı virgülden sonrası Yok.
Dıırıt, Dırııt..

 

Olağan şüpheli noktalı virgül gibi olsa da sanki o masum gibi.

Önceki yazılarda, dosya içinde yaz geçiyor mu? Tırnak var mı diye baktık. Ancak bunların arasında/öncesinde/sonrasında gelecek karakterler için bir yol yöntem önermedik. Ve görüldüğü üzre ilk beklenmedik karakter sonrası işleme girmedi.

Fakat 😉
Bununla birlikte daha önce aldığımız bir kararın, burada sonucunu görebiliyoruz:
Hatalı olan 88$# karakterler sonrası çalışmadı ama tümden hata vermek yerine buraya kadar olan kısımları işleme aldık. Yaklaşık olarak hatanın en sonra doğru işlemden sonra olduğunu tahmin edebiliriz.
Örneğimizde, hatanın yaklaşık olarak Nasılsın? ‘ın hemen sonrası bir yerlerde olduğunu öngörebiliriz.

Hatayı bulduysak, çözüme yaklaştık demektir 😉


Görsel

Konuşur gibi Türkçe Kod #13: İki Satır

##1. Bölüm: Türkçe kodlama | ##2. Bölüm: TAR-Python ayarları
##3.Bölüm: kendi .tr uzantımız | ##4. Bölüm: Dil = KARAKTER yorumlayıcısı
##5. Bölüm: Donanım Sürücüleri | ##6. Bölüm: Kendi YAZ komutumuz
##7. Bölüm: Tüm harfleri 1 değişkene atama | ##8. Bölüm: Kendi komutlarımız
##9. Bölüm: YAZ’ma şekilleri + Teknoloji Oteli | ##10. Bölüm: Tırnak
##11. Bölüm: Burası Mühim | ##12. Bölüm: Yeni Satır


Daha önce Yaz komutu ve Tırnakları yakalamıştık ve arasında geçen metini, cümle isimli değişkene atamıştık. Ardından bunu da ekrana yazdırmıştık. Tek seferlik bu komut için bir sorun yoktu ancak son bölümde yeni satıra geçip, yeni bir yaz komutu verdiğimizde işler karışmıştı. Satır atlama yani \n sorununu çözdüğümüzde ise karşımıza farklı bir tablo çıkmıştı.

yaz "merhaba dünya"
yaz "Nasılsın?"

Yeni satır karakterini yok ettik ama  Merhaba Dünya ile Nasılsın birleşik olarak geldi.

Bi yerlerde araya girip müdahale gerekiyor. Foksiyonumuzun tamamına bir göz atalım:

def Oku():
UzantiKontrol()
#print okunan
harfler = list(okunan);
#print harfler
komut = ""
tirnak = "son"
cumle = ""
for h in harfler:
komut += h
#print komut
if komut == "yaz":
komut = ""
elif komut == "\"":
print "tirnak var"
if tirnak == "bas": tirnak = "son"; print "ilk tirnak"
elif tirnak == "son": tirnak = "bas"; print "ikinci tirnak"
komut = ""
elif tirnak == "bas":
cumle += h ; print cumle
komut =""
elif komut == " ": komut = ""
elif komut == "\n": komut = ""
print cumle
Oku()

//Kopyalamak için metin olması güzel ama Steemit tab’lere izin vermediği için şöyle baksak sanırım daha sağlıklı olacak:

isterseniz daha önce kontrol amaçlı koyduğumuz, “tınak var”, “ilk tırnak”.. gibi açıklamaları kaldırıp daha sakin olarak görelim.

 

Görüleceği üzre, ilk tırnak sonrası başlattığımız “cümle“, ikinci tırnağı ve sonrasında iki satırdaki ilk tırnağı da görüyor ama birleştirmeye devam ettiğimiz için, ayrı ayrı yaz komutlarının metinlerini birleşik halde çıktı alıyoruz.

Hmm..

Ne yapmalı ne etmeli..

 

🙂

“Merhaba Dünya”nın sonundaki tırnak ile “Nasılsın”ın başındaki tırnak arasında bir şeyler yapmak işimizi çözebilir sanırım. Yani şu el-if’in içi:

burada yine bir karar aşaması var.

Tırnağın kapandığını görür görmez, mevcut cümleyi hemen orada ekrana basacak mı?
yoksa,
atıyorum cümleler adında başka bir dizi içinde mi toplamak lazım?
//Bu tür seçim yapmak durumunda kaldığımız kararlarla, dolaylı olarak programla dilimizin karakteristik yapısını oluşturuyoruz sanki.

Zamanında ASP’nin tüm kodlara bakıp çıktı sunana kadar boş ve beyaz bir ekrana baktığımızı hatırladığım için, benim oyum -şimdilik- hemen oracıkta gereken işlemi yapmak yönünde.

45’e print ekleyip, 49’daki print’i kaldırıp bakalım..

Tamam gibi ama olmadı. İkinci defa ekrana basmadan önce bir de cümle’nin içini silmemiz lazım // ki yeni göreceği tırnak ve sonrasındaki metin, bağımsız ikinci bir cümle olabilsin.

Yani, cumle=”” ekleyelim:

ve bakalım:

Yey!


Görsel ;))

Konuşur gibi Türkçe Kod #12: Yeni Satır

##1. Bölüm: Türkçe kodlama | ##2. Bölüm: TAR-Python ayarları | ##3. Bölüm: kendi .tr uzantımız

##4. Bölüm: Dil = KARAKTER yorumlayıcısı | ##5. Bölüm: Donanım Sürücüleri

##6. Bölüm: Kendi YAZ komutumuz | ##7. Bölüm: Tüm harfleri 1 değişkene atama.

##8. Bölüm: Kendi komutlarımız | ##9. Bölüm: YAZ’ma şekilleri + Teknoloji Oteli

10. Bölüm: Tırnak | ##11. Bölüm: Burası Mühim


Bir şekilde direk bu sayfaya geldiyseniz, konuya direk buradan dalış yapsanız da olur elbet lakin olayı ince ince idrak ederek kavramak isterseniz önceki bölümlere göz atmanız daha sağlıklı olabilir.


Son konumuzda YAZ’ı yakaladıktan sonra gelmesini beklediğimiz TIRNAK işaretini yakalama olayına bakmıştık. Ardından TIRNAK sonrası başlayacak olan metin için, sıradaki her harfi karakteri cumle değişkeni içinde toplamıştık. Ta ki İKİNCİ TIRNAK işaretini görene dek.

Ve aradaki boşlukları yok etmiştik 🙂

Peki programcı şöyle bir kod yazarsa ne olacak?

Yaz "Merhaba Dünya"
Yaz "Nasılsın"

Bakalım nasıl bir sonuç alıyoruz:

What?

Ne oldu ki, ilk satırı bile göremedik? En azından sadece ikinci satırın başlayana kadar olan kısımların bir çıktısı görseydik..

Dikkatlice bakarsak örnek.tr program dosyamızda

Yaz “Merhaba Dünya”

diyor. Ancak yorumlayıcımız TAR ile yaz var mı diye kontrol ettiğimiz komut “yaz”

Yaz ≠ yaz

ASCII tablosunu incelediğimiz yazıyı hatırlarsanız, her bir küçük harf ve büyük harfi ayrı BYTE’lar ile tanımlıyorduk. Bkz: 8 bit ASCII table

Yine bir karar noktası

Programlama dilimiz küçük harf – büyük harfe duyarlı mı olacak yoksa nasıl yazdığı önemli değil mi diyeceğiz.

YAZ = YAz = Yaz = yaz = yAz = yAZ

şahsen kendi tercihim, programcının canın istediği şekilde yazması yönünde. İster YAZ der iterse yaz. Bazı dillerde bu sorun yüzünden zihnimizde Büyük-Küçük bilgisini tutmak zorunda kalıyoruz. Bkz: Serial.Println, pulseIn, digitalWrite ..

her bir IF sınamasında yukarıdaki tüm versiyonları yazmaktansa, bize gelen karakterlerin hepsini önceden küçültür ve öyle işleme alırsak daha sağlıklı olabilir.

// I harfi için korku filmi sesleri size de geldi mi 🙂

 

Tamam küçültelim de standart lowercase fonksiyonları ingilizce temelli olduğu için  IrMak kelimesini irmak olarak küçültüyorlar. Bizde küçük ı harfinin büyüğü yok, i harfinin büyüğü ise I

Kodcu tek satırda değil de iki satırda YAZ derse ne olacak derken, nereye geldik 🙂

Ok. Şu an için örnek.tr dosyamızdaki Yaz komutunu yaz yapıp sonucu görelim ve Harf Küçültme işini sonraki yazılara bırakalım.

E hani “Nasılsın?”

Onun yerine bir boşluk var sadece..

Çoğu zaman, hatanın olduğu yer aynı zamanda çözümün de olduğu yerdir.
Biz bir karakter olarak görmesek bile, NL: New Line: \n CR: Carriage Return: Satır Başı yazısından hatırlarsak, sonraki satırı belirten görüntüsü olmayan ama bit/byte karşılığı olan karakterler vardı.

Biz ENTER tuşuna bastığımızda oluşan  \n gibi  örneğin. O halde boşlukları kaldırdığımız gibi yeni satır karakterlerini de silebiliriz.

Şimdi yeniden bakalım:

Yey!
Nasılsın yazısı da geldi!
Ama öncekilerle birlikte. Çoğu çözüm yanında yeni sorun da getirirmiş 😉 Bkz: internet, tablet..


Görsel

Konuşur gibi Türkçe Kod #11: Burası Mühim

##1: Türkçe kod | ##2: TAR-Python
##3: .tr uzantımız | ##4: KARAKTER yorumlayıcısı
##5: Sürücüler | ##6: YAZ
 ##7: Harfleri değişkene atama. | ##8: Komutlarımız
 ##9: YAZ’ma şekilleri + Teknoloji Oteli | ##10: Tırnak


Önceki bölümdeki bazı kısımları açıklayarak devam edelim. Zira BURASI MÜHİM. Çünkü neredeyse YENİ BİR PROGRAMLAMA DİLİNİ ÜRETMENİN ÖZÜ burada denilebilir.

Gayet basit ama mihenk taşı hikaye burada başlıyor:

Önceki bölümlerde, örnek.tr dosyası için yazılan her şeyi harf harf parçalamış ve hepsini liste halinde harfler değişkenine atmıştık.

Ve bu harfleri TEK TEK YAN YANA GETİRİP, bize lazım olan bir komut var mı yok mu bakıyoruz.

Şimdi kodları yorumlayan pc’nin kendiniz olduğunuzu düşünün. PC ile empati 🙂

Size komut =”” denilmiş. Komut adında bir değişken var ve şu an içi boş.

Ardından komut += h denilmiş.

Yani biraz önce örnek.tr program dosyası içinde yazılmış olanların

İLK HARFİ artık komut’un da değeri. Yani komut=y

ve bakıyoruz; YAZ, TOPLA, EĞER vb.. komut olarak kullanmak istediğimiz bir terim geçiyor mu?

şu an için komut = y olduğu için
komut == “yaz” sınaması bize Hayır diyor.  FOR döngüsü içinde olduğumuz için devam ediyoruz.

komut += h gördüğümüz için komut‘umuza bir harf daha ekliyoruz ve artık komut = ya

yeniden sınama yapıyoruz;
komut, “yaz” a eşit mi?
hayır
devam..

komut += h  peki o zaman, komut = yaz

komut, “yaz” a eşit mi?
Eveet! 🙂
O halde TIRNAK aramaya başlayabiliriz. Tabi öncesinde komut‘u yeniden boşaltalım ki yeni yakalayacağımız terimler için karışıklık olmasın:

komut = yaz ise komut=”” olarak atadığımız için en baştan bakıyormuşçasına devam edebiliriz.

 

Bakalım tırnak var mı?

Varsa, bunu “tırnak var” diye belirtelim. -şimdilik tabi ki, sonra kaldıracağız-

Ve ayrıca Baştaki Tırnak mı Sondaki tırnak mı bu sorunu çözmemiz lazım:

Akış sırasına göre gittiğimiz ver her terim sonrası komut’un içini boşalttığımız için,
tırnağı ilk gördüğümüzde tırnak = bas yaparsak, az sonra gelecek olan Merhaba Dünya gibi bir METİN için hazırlık yapabiliriz 😉

Aradığımız terimi bulunca, sonrakilere hazır olması için komut‘un için boşalttığımız gibi, tırnak = bas ‘ı yakaladığımızda, sonrasına hazırlık için tırnak = son yapıyoruz.
Benzer şekilde tırnak = son ise de tırnak = bas yapıyoruz.

Peki!
tırnak = bas ise cümle başlıyor demek, o halde yeni gelecek her harfi cümle değişkeni içinde toplayabiliriz 😉

Güzel.

Şimdi önceki bölümlerde konuştuğumuz Boşluğu Yokluğa eşitleme olayını yapalım 😉

ve ardından döngünün dışından da cümle‘nin on halini ekranda görelim.

 

Çarşambanın gelişini perşembeden tahmin edebilenler için, “Yeni bir Programlama Dili nasıl yazılır?” sorusuna teknik manada mühim bir açıklama getiren kısım burada yazılanlar. Zira bundan sonraki çoğu şey
for h in harfler döngüsü içinde dönüp duracak. Ve her döngü içinde YAZ var mı KIŞ var mı 🙂 TOPLA var mı ÇARP var mı diye bakıp duracağız.

Canınızın çektiği başka komutlar varsa  kurgusunu burada yapabilirsiniz 😉


Görsel

Konuşur gibi Türkçe Kod #10: Tırnak

##1. Bölüm: Türkçe kod yazma.

##2. Bölüm: TAR-Python ayarları.

##3. Bölüm: Kendi .tr uzantımız.

##4. Bölüm: Dil üretmek = KARAKTER yorumlayıcısı yazmak.

##5. Bölüm: Donanım-Yazılım kesişimi = sürücüler.

##6. Bölüm: Kendi YAZ’ımız.

 ##7. Bölüm: Tüm harfleri bir değişkene atama.

 ##8. Bölüm: Kendi komutumuz.

 ##9. Bölüm: YAZ’ma şekilleri + Teknoloji Oteli


Son yazıda sadece kod yazmak değil farklı kararlar da almak gerekiyordu. İster istemez diğer dillerdeki YAZ’ma şekillerine yeniden baktım.

Mesela, Basic‘te Merhaba Dünya şöyle yazılıyormuş:

PRINT "Hello, world!"​

Ataların lisanında 😉 ise şöyle
#include
int main(void)
{
puts("Hello, world!");
}

Daha genç versiyonu C++ şöyle
#include
int main()
{
std::cout << "Hello, world!
";
return 0;
}

more+

Görüleceği üzere aynı kaynaktan beslenen iki dil için bile yazım farkları var. Üstelik sadece int main gibi hazırlıklık kısımları değil, direk YAZ işlemini yapan kısımlarda da farklılık var.
puts ya da std::cout <<

Web ile birlikte zirve yapan JavaScript’te ise document.write(‘Hello, world!’); şeklinde.

Her birinde faklı bir şekil söz konusu. Son örnek olarak Logo’da tırnak yerine köşeli parantez kullanılmış: print [Hello, world!]

Buradaki TIRNAK yerine Köşeli parantez kullanımı; önceki yazıda @kagantrky ‘in da katkılarıyla incelediğimiz durumlar için cesaret verdi. Bir dilde ekrana çıktı almak için puts kullanmak gerektiğini öğrenmek zorundayken bir başka dilde aynı işlem için [  köşeli parantez  gerektiğini bilmek/öğrenmek zorundayız.

E madem, yeni bir dil için bazı yeni şeyleri öğrenmek zorunlu o halde TAR için de yeni şeyler pek ala söz konusu olabilir 😉


İsterseniz önce normal yoldan bakalım.

Yani yaz "Merhaba Dünya" şeklinde bir yazım için TIRNAKLARI ve ebetteki arasında METİNİ tespit etmemiz lazım.

A’ a! Yeni bir sorunumuz var.

 

İlk tırnak da ikinci tırnak da aynı şekilde: "

O halde

  • TIRNAK ile İLK karşılaştığımız anda bunun bilgisini bir yerde tutmamız lazım
  • Ve hemen içindeki harfleri bir CÜMLE olarak birleştirmemiz lazım
  • CÜMLEYE eklemeye devam etmeli
  • Ta ki İKİNCİ TIRNAK karşısına çıkana kadar
  • Her tırnak ile karşılaşmada bunun HANGİ TIRNAK olduğu bilgisini güncellememiz lazım

Tabiki bir de BOŞLUK var. ”
Bir şeyin kıymetini yokluğunda anladığımız gibi YAZ’ın bittiğini sonbaharın/BOŞLUK’un gelmesinden anlıyoruz ki YAZ tek başına bir kelime olabilsin.
Ama aynı zamanda YAZ’da sonra SADECE bir boşluk HEMEN ardından TIRNAK şartı koşmak da gıcık edici olabilir.
Bununlabirliktebilgisayarınkelimeleriayırtetmesi için boşlukgörmeihtiyacıolmayabilir; )
Bu yüzden boşluğu yok edebiliriz // Boşluğu yok etmek.. felsefik bi şey gibi durdu 🙂


TIRNAK hangi tırnak bilgisini tutmak için tırnak adında
ve tırnakların arasındaki metini oluşturup saklamak için cumle adın da değişkenler atayalım.
son/kapanış bir tırnağı görmüş ve şimdi karşında çıkanı ilk/başlama tırnağı kabul etmesi için tırnak=”son” yapalım.

Daha sakin bir görünüm için bazı printleri etkisiz hale getirelim.

şimdi
y
ya
yaz
yaz ”
yaz “M

akışı içinden YAZ ve TIRNAK yakalamak için oltamızı atalım 😉

dikkat edilmesi ve anlaşılması gereken kritik noktalardan birisi de

40. ve 46. satırlarda gördüğümüz komut=”” ataması, komut sürekli elimizde tuttuğumuz ve içine baktığımız bir değişken olduğu için HER KOMUT ya da işlemeden üzerinden geçtiğimiz HER KARAKTER sonrası mevcut içeriğini yokluğa eşitliyoruz. //Bi felsefik söz daha 🙂

 


Görsel

Konuşur gibi “Türkçe” Kod #7: Harf Listesi

Önceki kısımlar:

 #1. Bölümde Türkçe Kod yazma fikrini ele almıştık.

#2. Bölümde TAR’ın üzerinde koşacağı Python’u kurmuş ve herhangi bir .exe dosyası gibi çalışabilmesi için Path ayarlarını yapmıştık.

#3. Bölümde nasıl PhotoShop’un kullanacağı dosyaların uzantısı .psd ise bizde TAR’ın kullanacağı uzantıyı .tr olarak belirlemiş bu bunların konsoldan çağrılabilmesini sağlamıştık.

#4. Bölümde Programlama Dillerinin mantığına bakmış, Php’den C++’a hepsinin aslında KARAKTER yorumlayıcısı olduğuna değinmiştik.

#5. Bölümde “A “gibi bir harfin de aslında 0-1’lerden oluştuğuna ve bunu göstermek için Ekranın/Donanım ve Yazılımın eklem noktalarına değinmiştik.

#6 Bölümde YAZ kodumuzu çalıştırmıştık.


Yukarıdaki yazıların toplamı ışığında, YAZ kodumuzun çalışma mantığını biliyoruz.  Biraz mutfak tarafına geçelim.

 

UzantiKontrol fonksiyonumuz ile TAR kelimesi sonrasına yazılacak olanları argüman olarak kabul ediyor ve ardından DosyaIcerik fonksiyonumuzla dosyanın içeriğini okuyorduk.

Şimdi önceki yazılarda üzerinde durduğumuz HARF HARF didikleme işlemimiz için,
Dosya içindeki BÜTÜN karakterleri bir liste içinde toplayalım. Boşuklar, Tablar, Satır atlamalar, tırnaklar, virgüller, parantezler elbetteki harfler ve rakamlar.. BÜTÜN her şey, harfler listemizin bir elemanı olsun.

So..

Bi tane Oku() fonksiyonumuz olsun. Bunun için
def Oku():
yazıyoruz alt satırda 1 TAB içeriden yazmaya başlıyoruz. (Çoğu editör bunu otomatik yapacaktır, ola ki TAB sayılarında bir aksilik çıkarsa, DELETE ile alt satırı yukarı ya çekip, arada hiç bir şey kalmadığında yeniden ENTER yaparak alt satıra geçebilirsiniz.

Oku() içinde önce UzantiKontrol() fonksiyonumuzu çalıştıralım.
Ardından harfler = list(okunan)  ataması yaparak yukarıda bahsettiğimiz tüm KARAKTERLERİ bi listede toplama işini yapalım. Ve bunu ekrana basalım.

 

Ve bakalım elimizde ne var.

Evet. Tam istediğimiz gibi. Listenin elamanlarına dikkat ederseniz y harfi,  a harfi, z harfinin yanında ardaki boşluk ve tırnak ve ardından Merhaba kelimesinin harfleri tek tek bulunmakta.

İyi ama şöyle olması gerekmez miydi? [‘y’,’a’,’z’,’ ‘, ‘”‘,’M’,’e’,’r’,… ..]

her tırnağın önünde bir u harfi var?
u’y’

Öyle olması gerekirdi. Ancak Türkçe karakterlerde sorun yaşamamak için hatırlarsanız üçüncü yazıda şu kodları eklemiştik
icerik = unicode(icerik,'utf-8')

ve özellikle UTF-8 kayıt yapan bir editör ile dosyalarımızı kayıt etmiştik.

Dolayısıyla, her değerin önündeki u, tırnağın içindeki karakterin UTF-8 formatında olduğunu söylüyor.


Görsel

Konuşur gibi “Türkçe” Kod #6: YAZ

Önceki bölümler:

“Türkçe”, Konuşur Gibi Kod Yazmak #1

Türkçe”, Konuşur Gibi Kod Yazmak #2: İlk Adımlar

“Türkçe”, Konuşur Gibi Kod Yazmak #3: Dosya Çağırma

“Türkçe”, Konuşur Gibi Kod Yazmak #4: Harf Harf Didikleme & Karakter Meselesi

Konuşur Gibi “Türkçe” Kod #5: Yazılım ve Donanımın Eklem Yerleri


Belki kendi icat edeceğimiz ya da en azından var olan bir cihazı kendimizin yapacağı durumlar olacak. Ve cihazın her hangi bir sebepten dolayı ekranı olursa; #4 ve #5 Nolu yazılardaki mantık hayli işimize yarayacaktır. Üstelik sembolleri ve harfleri kendimiz oluşturabileceğimiz için Ğ Ü Ş Ö gibi karakterin de rahatça kullanılabildiği ve metinleri Türkçe olan cihazlar güzel olacaktır.

Tabi bu güzellik yanında “font” gibi estetik, işlevsel ama uğraştırıcı bir sorunu/çözümü de yanında getirecektir. Neyse ki TAR için yazı fontu veya bir ekranın çalışma düzenini işleten bir sürücü hazırlamak zorunda değiliz.

// Niye onu da biz yapmıyoruz diyenleri rahatlamak için söyliyeyim; Python php node asp.. hiç biri işletim sistemi/sürücü derinliğine inerek ekrana “Hello World” yazdırmıyor. Zaten işlemekte olan bir sisteme, işletim sistemine pas atıyor.

Biz de diğerleri gibi Windows’a yaz/ print komutunu göndereceğiz ve M, E, R, H, ..  harflerini yazmak için ekranın hangi pixel’ine hükmetmesi gerektiğini ona bırakacağız.

So..
Pixel seviyesinden Harf seviyesine çıkıp, Kodlara yakından bakarak devam edelim..

Seri boyunca Başlıklardan eksilmeyen amacımız: TÜRKÇE Kod Yazmak.

Yani  şunlara denk geldiğimizd

BEGIN DISPLAY("HELLO WORLD!") END.


10 PRINT "Hello, World!"
20 END


package main
import "fmt"
func main() { fmt.Println("Hello, World")}

tümden Fransız gibi hissetmek yerine, anlamaya daha yakın olmak.

BAŞLA EKRAN("MERHABA DÜNYA!") SON.


10 YAZ "Merhaba, Dünya!"
20 SON


ana paket
içerigetir "duzen"
fonksiyon ana() { duzen.YazSatir("Merhaba, Dünya")}

Görüleceği üzere Kodlamadan hiç anlamasak bile Japonca okuyor gibi de olmuyoruz.


Madem kendi dilimizi yazıyoruz..

İlerledikçe gramer yapısı için de bir şeyler düşünebiliriz 😉 Ancak şimdi Hem mümkün olduğunca sade, hem okuması kolay olacak şekilde başlayalım derim.

Yukarıdaki tüm örneklerden daha sade bir şekilde kod yazabiliriz, mesela Programımız  şöyle olsa

çok tatlı olmadı mı?

başla, bitir, include/içeaktar, paket vs. olmadan,

Sadece YAZ “Metin” kodunu yazıyoruz. Ve çalıştığında tırnak içindekileri çıktı olarak ekrana yazıyor.


Görsel

 

Konuşur Gibi “Türkçe” Kod #5: Yazılım ve Donanımın Eklem Yerleri

Önceki bölümler:

“Türkçe”, Konuşur Gibi Kod Yazmak #1

Türkçe”, Konuşur Gibi Kod Yazmak #2: İlk Adımlar

“Türkçe”, Konuşur Gibi Kod Yazmak #3: Dosya Çağırma

“Türkçe”, Konuşur Gibi Kod Yazmak #4: Harf Harf Didikleme & Karakter Meselesi


Bu yazıyı hazırlamak için siteye girmeye çalıştığımda SSL/https hatası almıştım. Bu vesileyle mini bir SSL kurma rehberimiz oldu, kime niyet kime kısmet 😉

#4 Nolu son yazıda, her “Merhaba Nasılsın” diyen amcanın masum aynı olmadığını, amcamızın sözde değil özde Türkçe konuşmak için UTF-8 kullanırsa daha sağlıklı olacağını görmüştük.

Yani;
Uzantısı .tr olan program dosyalarımızı kayıt ederken, kullandığımız editörün UTF-8 kayıt yaptığından emin olmamız gerekiyor. Bu minvalde SublimeText3 işimizi görecektir.

Not defterini açıp, içine;

yaz "Merhaba Nasılsın"

kodunu yazıp, Farklı kaydet seçeneğinden Selam.tr adıyla kayıt yapabilirsiniz. Ve buradaki “ı” harfi sorunsuz görüntüleniyor olabilir ama özünde UTF-8 kayıt yapılmadığı içim TAR’da sorun yaşatacaktır. Bu yüzden aynı kodu, SublimeText ile yine Selam.tr adıyla kayıt edip

tar Selam.tr

diyerek çalıştırdığımızda TAR, selam.tr dosyasını açıp harf harf, karakter karakter içindekileri alacak ve yorumlamaya başlayacaktır.


..da

–Neyi nasıl yorumlayacak? Yaz‘ın manasını ne biliyor ki?
–bilmiyor!

Hadi başka bir konudaki bilgilerimizi birleştirelim; WiFi’den Tost Makinası Kontol serisinin 5. yazısında Serial porttaki bilgilere ulaşmış ve cihazın server hizmeti için hazır olup olmadığına bakmıştık. Ardından bazı pinlere elektrik göndermiş, makinayı çalıştırmıştık.

SeriPort’ta nasıl “?pin=MotoruAC” yazabilir de biz onu okuyup içinde AC yazıyor mu diye bakabiliriz ki?

Elbetteki AC yazmaz. Yazamaz. Ama elektrik var-yok, 01000001 01000011 olabilir. Ve hatırlayınız bu 1-0’lar A ve C demek.

O halde 01111001 01100001 01111010 var mı diye bakarsam yani :Y A Z geçiyorsa,
tost makinası çalıştırmak gibi ekranın belli Pixel’lerini açıp kapatır ya da rengini ayarlayabilirim.

Ve tostmakinalarının/ledlerin/pixellerin hangilerininin çalışacağını öyle bir seçerim ki YAZ dan sonra gelen “iki tırnağın arasındaki” metni gösterecek şekilde olur 😉

Umarım olayın mantığını anlatabilmişimdir. Fark ediyorsanız olay Ekranı pixel pixel kontrol eden bir yazılama gidebilir. Yani ekran kontrolcüsü yazabiliriz. Daha bilindik ifadeyle “ekran kartı sürücüsü/driver” hazırlayabiliriz.

Evet bu hali çok ilkel ama yazılım ve donanımın EKLEM yerlerindeki olayları anlamak ilerde bir işletim sistemi ya da tcp/ip/https/www gibi kendi protokollerimizi hazırlamak için zemin hazırlayabilir 😉


Görsel 1 Görsel 2 Görsel 3

“Türkçe”, Konuşur Gibi Kod Yazmak #4: Harf Harf Didikleme & Karakter Meselesi

Önceki Bölümlerde: #1: Giriş#2: İlk adımlar#3: Dosya Çağırma, adımlarına bakmıştk. Kaldığımız yerden devam ediyoruz.. Next.. Sonraki.. 😉


İlk, kodlamasını Türkçe olarak yazacağımız dosyamızı oluşturalım. Bunun için

Not Defterini açın.

“`
Hey! Selam, nasılsın?

““

..yazın. Ve uzantısını otomatik .txt yapmaması için Kayıt Türü: Tüm Dosyalar olarak seçin, kaydedin.

 

Kullanım kolaylığı açısından,
Başlat > Cmd >
Cd şu klasör > cd bu klasör.. şeklinde uğraşmamak için, tar.py ve ornek.tr dosyalarının bulunduğu klasör seviyesine çıkın ve Shift’e basarken bu klasör üzerinde Sağ tıklayın.

Böyle yaptığımızda explorer menüsünde “Komut penceresini burada aç” seçeneği de gelecek 😉

Görüleceği üzere,
E:
cd Equinox
cd _Python
cd KendiDilim
cd v1
gibi tek tek yazmak durumunda kalmadık. Direk ilgili klasörde başladık.

O halde “` tar “` yazıp enterlayalım ve bizden dosya ismi beklesin

peki..
TaR az önce içine “Hey! Selam, nasılsın?” yazdığımız, ornek.tr dosyamızı çağırsın.

hadi bakalım..

What?! Bu da ne?

Hemen her yerde karşımıza çıkan, bazen saç baş yolduran Türkçeye karakterlerle ilgili hatalardan birisi. Bu tip hatalara genel olarak “ığşü hatası” diye bir isim mi versek acaba 🙂

Neyse ki UTF-8 olarak kaydetme şansımız var.

–UTF-8 derken?
Unicode Transformation Format’ın kısaltılmışı yani Unicode Dönüşüm Biçimi.
–Himm.. Unicode? Üniversal kod? galiba. Da nasıl?
Unicode: (Evrensel Kod) Unicode Consortium organizasyonu tarafından geliştirilen ve her karaktere bir sayı değeri karşılığı atayan bir endüstri standartıdır.

 

–İyi de her karakteri neden sayı ile ifade edelim ki? A harfi, A olsun işte.
–Olsun da şekerim, sen Google’a A yazıp aradığında, kablonun içinden A harfi mi gidiyor 

–Elektrik/Elektron falandır herhalde giden.

–Elektrik gibi bir şeye “bak bu A harfi bu da B” diye nasıl anlatırsın.

–Anladığı dilden 🙂 Elektrik var, Elektrik yok. 1-0. Mesela;
VarVar-Yok-Var: 1 1 01 : A harfi
Var-Yok-Yok-Var: 1 0 0 1 : B harfi
olursa ortak anlaşma yolunu bulmuş oluruz 😉

Fakat ben B için böyle değil de daha farklı bir Var-Yok sıralaması seçebilirim. Keyif benim değil mi,
Var-Yok-VarVar : 1 0 1 1 : B olsun diyebilirim.
Evet diyebilirim. Ama atıyorum Tukcell’in Avea’nın sunucuları bu sıralamayı Z olarak yorumluyorsa, yazdığım SMS karşı tarafa başka bir şey olarak gidebilir..

Operatörle anlaşıp şöyle diyebiliriz, bundan hepimiz şu sıralama şeklini esas alalım:

1 1 1 1 : A
1 1 1 0 : B
1 1 0 1 : C
1 1 0 1 : Ç
1 0 1 1 : D
1 0 1 0 : E
1 0 0 1 : F
1 0 0 0 : G

0 1 1 1 : Ğ
0 1 1 0 : H
0 1 0 1 : I
0 1 0 1 : İ
0 0 1 1 : J
0 0 1 0 : K
0 0 0 1 : L
0 0 0 0 : M

Ee.. Var-Yok seçeneklerimiz bitti 🙂

–“O halde bize 4 bit yetmeyecek.. bunun küçük harfi, boşluğu, virgülü sayısı sayısı var, biz en iyisi bunu 8 bit yapalım ki M’de tıkanıp kalmadan 256 seçeneğimiz olsun” denilmiş.

Yani ASCII tablosu.
Sağ solda karşımıza çıkan ASCII dediğimiz şey; aslında çocukken 13121 yazarak, ACABA ‘yı kast ettiğimiz şifreli   haberleşme şeklimizin, karşılıklar tablosundan çok farklı değil aslında.

Amma Velakin

Şu tabloya bir bakın hele..
Dünya toplamında kullanılan BAYA bi harf var.

Oysa bizim elimizde M‘ye kadar kesmiyor deyip kullanmaya başladığımız ASCII içinde bile 256 karaktere yer var. Böyle olmaz. En iyisi Dünya üzerinde kullanılan bütün dillerin, bütün harfleri için bir tablo yapalım, kökten çözüm bulalım denilmiş.

Unicode Organizasyonu toplanmış. Yukarıdaki liste gibi bir standart çıkarmış.
–İyi de o zaman bu 8 bit [1 0 1 0 1 0 1 0] olamaz ki.
–Evet değil. Unicode bir saklama biçiminde her bir karakter için ayırmanız gereken yer 32 bit.

Eh 32 bit ama herkes için sorun çözüldü.

İnternet

Elektronik devreleri ve karakter setleri, kendi aralarında top çevirirken İnternet diye bir çıkar ve hayli popüler olur. Böyle olunca, bir karakter için 8 bit yerine 32 bit yani 8 GB yerine 32 GB veri birilerinin canını sıkar, hem harddiskte çok yer demek, hem yoğun ve yavaş bir trafik..

Bu kişiler; şimdilerde Google’ın kendi yeni programlama dili GO‘yu geliştiren Rob Pike ve Ken Thompson‘dır. Gayet zekice bir yöntemle, hem yine tonlarca harfle eşleşecek hem de 32 bit’lik Unicodu’u 8 bit’e dönüştürecek bir yöntem icat ederler:
Unicode Transformation Format : Unicode Dönüşüm Biçimi: UTF.

Sanırım biraz yukarıdaki kısa açıklama, şimdi daha yerli yerine oturdu 😉
İyi de nasıl yapıyorlar? diye merak edenler buradan dalışa geçebilir.
//SEO açısından, Google’ın neden utf-8 siteleri bir tık daha fazla sevdiği de anlaşılabilir 😉

Soo..
TaR’ımıza dönelim.
Madem Türkçe Karakter sorunu için Unicode veya UTF-8 çözüm sunuyor. Onların formatında kayıt yapalım.


ornek.tr
‘yi açın ve Dosya>Fark Kaydet menüsü altından, yine Kayıt Türü: Tüm Dosyalar seçili iken,
Alt taraftan Kodlama: UTF-8 seçip öyle kayıt edin.

 

Ok. Şimdi yeniden konsola geçelim.

 

.. ve Nihayet!

diyecektik ama diyemeden kursağımızda kaldı.

 

–Şimdi ne oldu?

Daha içeriden bakalım…

Not ve Sub diye iki klasör oluşturun.
Not Defteri açın, yeni bir dosya içinde sadece “`ğ“` yazıp, Not klasörü içine ğ.txt adıyla kayıt edin.
SublimeText açın, yeni bir dosya içinde sadece “`ğ“` yazıp, Sub klasörü içine ğ.txt adıyla kayıt edin.

Text dosyası olmalarına rağmen, bunları Sağ tıklayıp, Birlikte Aç diyerek  IrfanView ile açalım. (ilk defa irfanview kuracaksanız, resim görüntüleme programı olduğunu, kurarken seçtiğiniz ayarlara, kendini varsayılan resim gösterici olarak atayabileceğini akılda tutun)

Ardından View > Show HEX view seçelim.

 

 

Görüleceği üzere, Note pad bizim istediğimiz şekilde kayıt yapmamış. Bize doğru gösteren SublimeText ile yaptığımız kayıt lazım.

SublimeText açalım, yeni bir dosya içine
“`Hey! Selam, Nasılsın?“`
yazıp, kayıt edelim.

ve yine konsola geçelim.

..vee

Yey!
İki tane I harfi içeren bir dosyayı TaR ile çağırdık ve tüm harflerini elden geçirip, çıktı olarak sunduk.

En başta, “SublimeText ile ornek.tr oluştur” deseydin, bu kadar uğraşmazdık” demiyorsunuzdur umarım.

Kendi Programlama Dilimizi yazacaksak, Hele ki bu TÜRKÇE olacaksa, ASCII, UTF vb Karakter Setleri ve Karakter  Kodlamaları hatta RAM‘da kaç byte veri tutulacağı gibi bilgileri de öğrenmek sanki hiç fena değil 😉