Skip to content

Instantly share code, notes, and snippets.

@denizozger
Created November 22, 2017 21:32
Show Gist options
  • Save denizozger/356cc6724b4aec5fb08207f2f4b4e73f to your computer and use it in GitHub Desktop.
Save denizozger/356cc6724b4aec5fb08207f2f4b4e73f to your computer and use it in GitHub Desktop.
<mengus> tamam
<mengus> o zaman ba$liyoruz
<mengus> dersi aib ile birlikte anlatacagiz parca parca
<mengus> i$leyecegimiz konular $oyle:
<mengus> - "Program" neye denir, nasil cali$ir.
<mengus> - kod nedir, data nedir, nasil i$lenir
<mengus> - degi$ken nedir, nasil kullanilir
<mengus> - ozel kelimeler (reserved keywords)
<mengus> - statement nedir, nasil kullanilir
<mengus> - fonksiyon nedir, yenir mi
<mengus> - input/output mekanizmalari
<mengus> - control structures:
<mengus> .tanim
<mengus> .durum operatorleri: if..elseif..else
<mengus> .durum operatorleri: switch
<mengus> .donguler: for
<mengus> .donguler: while
<mengus> bir sorunuz oldugu zaman ozelden mesaj atin, ben
kanala paste edip cevaplayacagim (ya da aib)
<aib> ikimizden biri olabilir
<mengus> ba$layalim.
<aib> hayhay
<mengus> "Program" neye denir, nasil cali$ir?
<mengus> bir program, en basit anlamiyla
<mengus> bir CPU (central processing unit-merkezi i$lemci)
tarafindan
<mengus> i$lenen, kullanicinin istekleri dogrultusunda bir
cikti ureten/bir i$ yapan kod parcalarina denir
<mengus> yuzlerce programlama dili, bu programlama dilleriyle
yazilmi$ binlerce program mevcuttur
<mengus> bu noktada yapilmasi gereken onemli bir ayrim
'program' ve 'script' ayrimidir
<mengus> program dedigimiz sey, bir platformda calismak uzere
'binary' hale getirilmis
<mengus> yani CPU nun anlayacagi dile 'tercume edilmis'
kodlardir
<mengus> script ise
<mengus> herhangi bir platformda cali$tirilacagi zaman, o
platforma ozel yazilmis tercuman tarafindan 'tercume edilen' kodlardir
<mengus> burada 'tercuman' dedigimiz hadisenin teknik adi
'compiler (derleyici)'
<mengus> programlar icin
<mengus> scriptler icin ise 'interpreter' olarak adlandirilir
<mengus> bu konuda da ha derine simdilik girmeyecegiz
<mengus> bir program iki parcadan olu$ur
<mengus> "kod" ve "veri"
<mengus> bunlari $imdi aib anlatacak
<aib> simdi efendim
<aib> "kod" dedigimiz kisim, programin kendisidir
<aib> kendisi derken, tamamini sizin yazdiginiz (veya elle
yazilan)
<aib> komutlar zinciridir
<aib> programin ne yapacagini kodu belirler (code)
<aib> data ise, programin yardimci kesimidir
<aib> turkcesi 'veri' olmakla birlikte, kodun isleyecegi parca
budur
<aib> ornegin basit bi program dusunun: hesap makinesi
<aib> bilgisayarda veya elinizde tuttugunuz olsun
<aib> bunun kodu su sekildedir:
<aib> kullanicidan giris al (hesaplanacak sey)
<aib> hesapla
<aib> ve ekrana yaz
<aib> burada kullanicinin girdigi sey ise data'dir
<aib> hesap makinesi bu datayi isler ve sonucu verir
<aib> data'yi yine kullanicidan alan kodun kendisidir tabii ki
<aib> program yani kod, data uzerinde islem yapar
<tuonela> i$lenen veya i$lenecek veri , kodun icine
gˆm¸l¸ olabilir mi.
<aib> tabii ki
<aib> ilerde de gorecegimiz uzere data girisi (INPUT) bir suru
yerden yapilabilir
<aib> bir programin datasi cok buyuk ve cesitli olabilir
<aib> ornegin hesap makinesi bile, "kullanicinin girdigi ilk
sayi" "kullanicinin girdigi ikinci sayi"
<aib> "kullanicinin yapacagi islem" seklinde bi suru data'ya
sahiptir
<aib> bu datanin verimli olarak kullanilabilmesi icin
parcalara bolunmesi sarttir
<aib> simdi mengus bi soruyu cevapladiktan sonra size bu
parcalara bolunmenin nasil oldugunu ve data parcalarinin "variable" ne
oldugunu anlatacak
<mengus> once bir soruyu cevaplayaagim
<mengus><Grabsplatter> bu baglamda java scripte script,
html'e interpreter diyebilir miyiz?
<mengus> burada biraz kavram karma$asi olmu$, $oyle
aciklayayim
<mengus> javascript'e script diyebiliriz, ancak interpreter'i
html degil 'BROWSER'dir
<mengus> bazen javascript ile yazilmi$ scriptler, bir
browser'da cali$irken digerinde cali$mayabilir
<mengus> bunun sebebi
<mengus> her browserin -maalesef- javascript'i kendine gore
bir $ekilde kullanmasi/yorumlamasidir
<mengus> html ise ne bir script ne bir programdir
<mengus> bir 'MARKUP LANGUAGE'dir
<mengus> markup language'in ne olduguna $imdi girmeyecegim
cunku konumuzun di$inda kaliyor
<mengus> $imdi,
<mengus> sonraki konuya gecmeden once
<mengus> buraya kadar anlamadiginiz/kafaniza takilan herhangi
bir $ey var mi?
*** Mode "-m" by mengus
<cortez> en basit ˆrnek olarak buna xircon ve xdream
olabilirmi? xircon bi program xdream ise xircon iÁin yazilmi$ bir script?
<mengus> cortez: evet, x dream, xircon icin yazilmi$ bir
scripttir, tcl diliyle yazilmi$tir
<mengus> ba$ka soru yoksa devam ediyorum
<aib> burada xircon'un TCL dilini interpret ettigi goruluyor
(hamza zulfikar mode)
<mengus> :)
*** Mode "+m" by mengus
*** Mode: +mtnr (m/moderated) (t/topic protection) (n/no
extmsg) (r/registered)
<aib> TCL genel bir scripting dili olmakla beraber cogu IRC
client tarafindan interpret edilmektedir
<mengus> dogrudur.
<mengus> $imdi aib'nin az evvel bahsettigi 'degiskenler'
konusunu acacagim
<detay_PRG101> (cok afedersiniz) peki$mesi acisindan, lingo da
director tarafindan interpret edilen bir scripting language'dir
<mengus> degisken, adi ustunde degeri degisebilen bir
kavramdir
* SSG kissadan hisse: makine diline (exe/dll dosyalari mesela)
donu$turulen diller compiled (derlenen), direk bir metin dosyasindan (bat,
asp gibi) cali$an diller interpreted (yorumlanan) dillerdir ve cali$mak icin
bir "exe"leri olmadigindan yorumlayici programa ihtiyac duyarlar..
interpreter ile cali$an bu dillere cogu zaman "script" denir..
<mengus> degiskenleri kavramanin en kolay yolu
<mengus> orta okul yillarindaki matematik derslerini biraz
hatirlamaktir
<mengus> x+7=10
<mengus> gibi bir denklem kurdugumuzda
<mengus> x'in degeri "3" t¸r
<mengus> bir baska denklemde
<mengus> x+10=21
<mengus> dersek, x'in degeri "11" dir
<mengus> gorulebilecegi gibi, x bir sayi degildir, biz
kendisine ne deger atarsak o degeri tutan bir 'kap'tir
<mengus> degiskenlerin programlar icindeki kullanimi ise cok
cesitlidir
<mengus> daha sonra kullanacagimiz bir veriyi saklamadan tutun
<mengus> bir 'dongu' yu kontrol etmeye,
<woe> yani degi$ken ba$lI ba$Ina sadece bo$ bir
bardaktar ibarettir. biz iÁine ne koyarsak onu tutar ??
<mengus> daha iyi bir benzetme yapilamazdi
<mengus> varana kadar bir cok iste kullanilabilir
<mengus> woe'nin orneginde soyledigi gibi, degi$ken bir
bardaktir
<mengus> ancak 'bardak', hepimizin bildigi uzere 'sinirli' bir
kaptir, alabilecegi hacim bellidir
<mengus> bunun bilgisayar ortamindaki kar$iligi da 'hafiza'dir
<mengus> degi$kenlerin alabilecekleri degerler, kendilerine
bah$edilen hafiza ile sinirlidir
<mengus> kimi diller degi$kenlerin tutabilecekleri hafiza
miktarini kendileri ayarlarken, kimi dillerde bunu sizin onceden kesin
olarak belirtmeniz gerekir
<mengus> bu onceden belirtme islemine herkes kafasina gore bir
cok isim verir: initiation, definition, declaration vs.
<mengus> biz anlatim kolayligi olsun diye 'tanimlamak' fiilini
kullanacagiz
<mengus> bir degiskenin kullanimi ile ilgili sembolik bir
ornek yaptiktan sonra
<mengus> aib size 'veri tipleri'ni anlatacak
<mengus> ornegin
<mengus> x degiskenini, simdilik 'olmasi gerektigi gibi' diye
nitelendirecegim, daha sonra anlam kazanacak bir sekilde tanimlamis olalim
<mengus> ve kodumuzun icinde
<mengus> x="Merhaba"
<mengus> diye bir 'atama (assignment)' yapmis olalim
<mengus> bu, bilgisayarimizin hafizasinda x degiskeninin
durdugu bolume 'Merhaba' karakter dizisini yerlestirecektir
<mengus> daha sonra
<mengus> print x
<mengus> diyerek
<mengus> 'x degiskeninin degerini ekrana yazdir'
<mengus> komutunu gonderdigimizde
<mengus> ekrana gelecek deger 'Merhaba' olacaktir
<mengus> buraya kadar sorusu olan?
*** Mode "-m" by mengus
<tuonela> mirc scriptleri yapIlIrken tcl mi kullanIlIyor
yani?
<aib> mIRC'in scripting dili kendisine aittir
<UnConscious> degi$kenlere yalnIz veri mi atanIr,
yoksa i$lem yaptIran bir kod da atanabilir mi?
<aib> mIRC scripting dilini anlayan ve interpret eden program
mIRC'dir
<mengus> degi$kenlere yalnizca veri atanir
<mengus> ancak bu veriyi bir kod parcasi olarak tanimlayip
<mengus> daha sonra 'bu degiskenin icindeki kodu calistir'
komutu verilebilir
<mengus> bu komut her programlama dilinde farklidir,
bazilarinda yoktur kendinizin yaratmaniz gerekir.
<mengus> ancak bir degiskenin icerigindeki kod, 'veri' olarak
algilanmaktan oteye gitmez
<krAl_EmrE> farzedelim ki degiskene 10 haneli rakam
siniri koyduk, degisken '50' de olsa '500000000' de olsa hafizada ayni yeri
mi kaplar?
<mengus> bu, kullandiginiz programlama dilinin hafiza yonetim
yontemleri ile ilgilidir
<mengus> ancak bir cok programlama dili, siz ne kadar alan
ayirirsaniz, degiskeninize o kadar alan verir ne daha az, ne daha fazla
peer))
<Shirakahn> veri sInIrlarI sonsuz mudur ben milyon
haneli sayIlar mertebesinde ÁalI$abilir miyim ˆrnegim ?
<mengus> bu konuya birazdan aib, veri tiplerini anlatirken
deginecek
* aib nod
<mengus> bir de hemen mikrofonu aibye devretmeden
<mengus> 'byte' kavramina hafifce bir degineyim, detayli
olarak 'input/output mekanizmalari' bolumunde anlatilacak olsa da
<mengus> gelen soruya istinaden anlatayim
<mengus> farzedelim ki degiskene 10 haneli rakam siniri koyduk
<mengus> dendi
<mengus> degi$kenlerin limitleri hane sayisiyla/karakter
sayisiyla degil, hafizadan ayirmak istedigimiz bayt sayisiyla belirtilir
<mengus> bir bayt, sekiz bit'ten olusmus bir pakettir
<mengus> bit ise degeri 0 ya da 1 olan bir 'kutu' olarak
dusunulebilir
<mengus> demek ki bir bayt
<mengus> 8 haneli ve ikilik tabanda bir sayidir
<mengus> ve degiskenlerin hafizada kaplayabilecekleri alan
<mengus> baytlar seviyesinde belirtilir
<mengus> ornegin "x 32 baytlik bir metindir"
<mengus> gibi tanimlar yapabiliriz
<mengus> bunlara detaylica daha sonra deginecegiz
<mengus> $imdi aib bize veri tiplerini anlatacak
<aib> yessir
<aib> gordugunuz uzere veri ve degisken kavrami cok genis bi
kavramdir
<aib> yani "veri" dedigimizde insan isminden tutun metine,
resme, her turlu sey bir 'veri' olabilir
<aib> yine deminki hesap makinesi orneginden iki veriyi ele
alalim
<aib> "kullanicinin girdigi sayi"
<aib> "kullanicinin yapacagi islem"
<aib> ve insani de bi program olarak dusunerek iki tane daha
veri ornegi vermek istiyorum
<aib> "en iyi arkadasimin ismi"
<aib> "en sevdigim renk"
<aib> gorebileceginiz uzere, bu veriler yapi olarak
birbirlerinden cok farklidirlar
<aib> ilki bir sayidir, ikincisi bir islem (+, -, /, x),
ucunsucu bir isim, dorduncusu bir renk
<aib> biglisayarlar matematiksel olarak calistiklarindan, bu
verileri bilgisayara gecirmek istediginizde
<aib> verilerin hepsi sayisal olmak zorundadir
<aib> yazdigimiz programlar da
<aib> bu verileri degiskenlere aktarirken sayiya cevirip,
<aib> degiskenlerden alirken sayilari tekrar gercek manalarina
cevirmektedirler
<detay_PRG101> bir harf nasil sayisal olarak ifade
edilir?
<aib> ornegin bir harfi hafizaya atarken
<aib> en genel olarak kullanilan yontem, simdi deginmemizin
yersiz olacagi "ASCII" kod tablosudur
<aib> bu tablo, her harfe BIR BAYT karsilik verir
<aib> ornegin hafizada bi yere 'a' harfini atmak istiyorsak
<aib> bu 'a' harfinin sayisal karsiligini bu tablodan bulup
hafizaya sayi olarak atariz
<aib> yalniz bu degeri hafizadan tekrar okurken, bize tekrar
sayi olarak donecektir
<aib> ve bu sayiyin hangi harfe tekabul ettigini yine ASCII
tablodan bakarak ogrenebiliriz
<aib> ama korkmayin bu isi programlama dilleri otomatik olarak
halletmektedir :)
<aib> iste burasi veri tiplerine deginmek icin guzel bir nokta
<aib> dedigimiz gibi hafiza sadece byte'lardan veya bit'lerden
olusmaktadir
<aib> fakat verilerimiz cesitlidir (geriye donelim, mor, mavi,
sari gibi renk olabilirken, ahmet, mehmet gibi en sevdigimiz arkadasin
isimleri olabilir)
<aib> programlama dilleri, kendi amaclarina ve
calistirildiklari platforma gore, kullaniciya cesitli "otomatik" veri
tipleri sunarlar
<aib> ornegin bir programlama dilinde 'renk' saklamak icin
'renk' tipinde bi degisken olabilir
<aib> boyle bi durumda "renk" tutacagini bildigimiz 'y'
degiskenine deger olarak bir renk verebiliriz
<aib> orn. y = mor;
<aib> sorulari almadan once standart veri tiplerine
deginecegim
<aib> en standart veri tipi "int"tir
<aib> "integer" yani "tamsayi" anlamina gelir
<aib> veri olarak, artili-eksili bir tamsayi alir
<aib> gunumuzde kullandigimiz islemcilerin "32-bit" oldugunu
duymussunuzdur
<aib> bu, islemcilerin en basit veri kapasitesini, yani
cogunlukla 'int'in veri kapasitesini belirtir
<aib> yani standart bir kavram olarak baktigimizda, 'int',
32-bit'lik bir tamsayi degiskenidir
<aib> icinde "32 bitlik bir tamsayi" alan bir bardak da
diyebiliriz
<aib> "32 bit"in ne olduguna deginmek gerekirse,
<aib> mengus'un dedigi 'bit' tanimini dusunun: "icine 1 veya 0
alabilen kutu"
<aib> kissadan hisse, "32 bit"lik bir int, icinde 2^32 yani 4
milyar farkli veri alabilir
<aib> bu veriler -2 milyardan +2 milyara kadardir (yaklasik
olarak)
<lhr> her 32 bit islemci kullanan sistemde int denen sey
32 bit mi alir
<aib> "int", genellikle islemcinin veri kapasitesini
yansittigindan dolayi, evet
<aib> fakat bir dil olur "bizim dilde int'ler 16 bittir"
diyebilir
<tuonela> 2lik bir sayIda 32 hanenin ¸zerine cIkamIyor
muyuz yani veri atarken bir int'e
<aib> dedigim gibi int 32 bit ise
<aib> ki 32-bit bir islemciyle calisan herhangi bir standart
dilde oyledir
<aib> 32 haneli bir ikili sayinin uzerine cikamazsiniz
<aib> bunu ondalik degere cevirdiginizde yaklasik olarak -2
milyar ile +2 milyar arasinda bir menzili vardir
<aib> simdi mengus diger standart data tiplerini hizli olarak
anlaticak
<krAl_EmrE> bir degiskene 32 bitten fazla veri saklama
sansimiz yok yani?
<aib> degisken int ise, hayir
<aib> ama degisik tipler vardir:
<mengus> hah
<mengus> int, aib'nin dedigi gibi yalnizca 'tamsayi' depolayan
bir veri tipidir
<mengus> dolayisiyla her $eyi yapmak icin yeterli degildir
<mengus> zira harflerin, kelimelerin, ondalikli sayilarin
girla gittigi bir dunyada ya$iyoruz
<mengus> standard veri tiplerinden int kadar sik kullanilan
bir tanesi
<mengus> 'string' yani 'metin'dir
* SSG not du$er: bilgisayarlarin sayi kavrami elektronigin
kisitlari yuzunden sadece 0 ve 1'den ibarettir. o yuzden sayilari ancak
yanyana bitlerle gosterebilir ve anlayabilirler. bilgisayar yanyana ne kadar
cok bit koyarsa o kadar cok sayiyi ifade edilebilir. bu kadar da ilkel
makinalardir aslinda bilgisayarlar.
<mengus> bir degiskenin icine az evvel bahsettigimiz "merhaba"
karakter dizisini depolayabilmek icin bu degiskenin depolayacagi veri tipini
string olarak belirtmek durumundayiz
<mengus> bu nicin onemlidir?
<mengus> ornegin elimizdeki x degiskenini
<mengus> 'int' olarak tanimladigimizi varsayalim
<mengus> ve bu degiskene 'merhaba' degerini atamaya calisalim
<mengus> bilgisayar (interpreter, compiler, ne isterseniz
artik)
<mengus> bu veriyi bir tamsayi olarak yorumlamaya cali$acak,
ba$arisiz olacaktir
<mengus> bu sebepten, veri tiplerini dogru tanimlamak her
zaman cok onemlidir.
<mengus> bu noktada olayi bir ornekle peki$tirmek isterim,
aib?
<aib> degisken turlerini bardak turleri olarak
dusunebilirsiniz
<aib> ornegin bir kola bardagi, icine kola almakla yukumludur
<aib> su bardagi ise su
<aib> ha su var, bir kola bardagina su koyamaz misiniz?
<aib> koyabilirsiniz, fakat bu turlu zorluklar getirir
<aib> ornegin ben sahsen bir kola bardaginin "kac yudumluk su"
oldugunu soyleyemezsiniz
<aib> soyleyemem*
* detay_PRG101 notu: x="merhaba" kodu derlendiginde hafizada 7
byte lik yer kaplayacaktir, x=32 dendiginde x, hafizada bir integer'in
kapladigi deger olan 2 byte kaplayacaktir. daha buyuk degerler icin farkli
tipte sayisal veri tipleri mevcuttur
<aib> cunku kola bardagini kolaya gore dusunurum, ve yarisi
kolayla dolu bi kola bardagi bana cok gelecekken
<aib> yarisi su dolu bi kola bardagi disimin kovuguna bile
gitmeyebilir
<aib> bu yuzden kodunuz verileri olcerken, verileri dogru yere
koymalisiniz
<mengus> $u noktada bir duralim, anlamadigi, sormak istedigi
bi$eyler olan var mi? zira bir anda cok veri oldu gibi geliyor bana?
*** Mode "-m" by mengus
<aib> evet evet
<aib> buyrun konusun
<tuonela> x=merhaba derken 7 bayt mI kaplar 7 bit mi?
<SSG> byte kaplar
<SSG> bitler bit kadardir
<krAl_EmrE> hahaha
<cortez> eheh
<Ancyreum> AHA
<mengus> her harf bir byte=8 bittir
<aib> standart olarak oyle evet
<tuonela> ha tamam dogru
<mengus> bu da $u $ekilde mantiklica aciklanabilir
<cortez> a nin bit olarak kar$iligi nedir?
<mengus> bir harfi bir bit ile ifade etmek durumunda olsak
<cortez> 011001 gibimi yani
<mengus> bir bitin degeri 0 ya da 1 olabilecegi icin
<aib> cortez: ASCII tablosunda diyosan 8 bite karsilik gelir
<tuonela> 32 derken 2 bayt mI 2 bit mi?
<mengus> elmizde yalnizca 2 harf olurdu
<SSG> bilgisayar a harfini sayiyla "65" oalrak ifade eder
ASCII tablosunda
<SSG> 65 sayisinin da ikilik sistemde kar$iligi 00100001 olsa
gerek
<cortez> :}
<aib> SSG: killik yapiim mi? o 'a'yi sormustu :)
<SSG> bu da yanyana degerleri 0 veya 1 olan 8 bit demek
<Zeus> yani her harf aslinda 8 bitten olu$uyor degil mi?
<aib> a da 00110001 olsa gerek
<mengus> Zeus: evet
<SSG> yes
<cortez> case sensitive varmi yani assembly de
<cortez> hmm aptalca bi soru oldu ehehe
<SSG> assembly'de degil karakter tablosunda var
<cortez> hmm
<SSG> "a" ile "A" nin kodu farkli ki bilgisayar ikisini
ayirdedebilsin
<SSG> charmap'ten acip bakabilirsiniz
<mengus> ba$ka sorusu olan?
<UnConscious> biraz ba$a dˆner gibi olacagIm ama, programlar
programlama dilleriyle yazIlIyor, peki derleyici programlar nasIl yazIlIyor?
<mengus> bu kadar adam var herkes anladi mi $imdi?-
<cortez> charmap nedir
<mengus> cortez: start->run->charmap
<Ancyreum> evet
<aib> UnConscious: olduklari gibi bir text dosyasina konuyolar
<SSG> ben cevap vereyim mi
<tuonela> ben 2 ¸ss¸ 32 = 4 milyar olayInI anlamadIm
<mengus> UnConscious: buna ssg cevap versin
<aib> UnConscious: daha sonra "interpreter" yani tercuman
programlar onlari oradan okuyup calistiriyor
<mengus> aib: bunu en iyi ssg bilir :)
<ilkerz_kodaranz> baslat-calIstIr-charmap ayaz
<SSG> UnConscious: derleyici programlar da derlenen
programlama dilleriyle yazilir ve kendileri de bizzat derlenirler
<ilkerz_kodaranz> karsIna cIkacak
<aib> UnConscious: yani script dillerini CPU yerine programlar
calistirir
<SSG> unconc: bu yumurta mi tavuk mu tarzinda bir probleme yol
acar gibi gorunur "ilk derleyiciyi nasil yazdilar?" diye..
<UnConscious> evet, tam onu soracaktIm...
<SSG> ilk derleyici de direk makina dilinde yazilmi$tir
<cortez> iyi kasmi$lardir :)
<Ancyreum> AHAHa
<woe> ilk programlama dili nedir? ve hangi dil ile
yazIlmI$tIr?
<mengus> bu sorunun da cevabi sanirim bulunmu$ oldu :)
<UnConscious> makine dilini direk cpu mu yorumluyor?
<aib> tuonela: icinde 32 tane bit saklayabilen bi degisken, bu
bitler ikilik duzende birer basamak olarak dusunduklerinde
<SSG> evet cpu'nun tek anladigi dil o malesef
<aib> tuonela: onluk dyzende 4 milyar farkli sayiyi
tuabilirler
<SSG> yani siz x=5; yaptiginizda o 36 05 00 gibi bir koda
donu$turuluyor
<Zeus> SSG: bu verinin i$lenebilmesi icin i$lemciden elektrik
gecmesi gerekli tabi degil mi?
<SSG> cpu da bunlari ezbere cali$tiriyor.. super de hizli
yapiyor bu i$i tabi
<SSG> e tabi elektrik olmadan bugun tuvalete giremiyoruz
<aib> Zeus: evet, CPU yapisi geregi bu 36 05 00 belli bi yere
yazildigi anda x'e 5 degerini veriyo
<mengus> :)
<mengus> bu noktada
<cortez> SSG: hahaha :)
<Zeus> :)
<mengus> iki saattir anlattigimiz 0 nedir 1 nedir e deginelim
<aib> +m ?
<mengus> CPU icin 1: elektrik geciyor
<mengus> 0: elektrik gecmiyor
<mengus> demektir teorik olarak
<Zeus> mengus: anla$tik.
<cortez> bi$i sorcam
<cortez> elektrik kaÁagi olursa program bozuk mu Áikar?
<cortez> :)
<detay_PRG101> bu sorunu ciddiye almak cok guc cortezim
<mengus> ben daha ciddi bi soru soracam
<Ancyreum> :)
<tuonela> 2 kere elektrik gecince bilgisayar 3 rakamInI mI
anlIyo yani
<mengus> $imdi durmadan devam edebiliriz ya da bir 5 dakika
mola verebiliriz
<tuonela> mola
<cortez> devam
<Ancyreum> mola verelim sigara molasi
<detay_PRG101> mola verilsin derim
<Ancyreum> sonra devam edelim
<Ancyreum> olur mu
<Ancyreum> =
<woe> evet mola iyi olur
<ferss> molaa
<mengus> ok
<mengus> o zaman
<SSG> ben de kola alayim
<mengus> bir 5 dakika mola veriyoruz
<mengus> ihtiyac molasi
<mengus> sonra kaldigimiz yerden devam
<mengus> moladan sonraki konumuz: ozel kelimeler (reserved
keywords)
<cortez> peki bi$i daha sorucam interpreted dillerde cpu ya
gidio dimi
<orqan> okurken yoruldum birakmaya gelmiyor :)
<mengus> cortez: elbette
<mengus> her $ey cpudan gelir cpuya doner
<Arbalest> ehem buradaydIm zaten
<SSG> meng: hahaha
<Zeus> SSG: abi tuvalete gidilir elektrik olmadan da gorerek
gitmek ba$ka bir $ey tabi :)
<mengus> bu arada mola verdik diye soru sormamazlik etmeyin,
ben buradayim cevaplarim
<mengus> hatta ben ne biz burdayi cevaplariz i$te :)
<cortez> yani $u an senin attigin mesaj bile cpuda derleniomu
yoksa ˆnceden derlenmi$ bu program kendisimi gˆsterio yazdiklarini
<mengus> 'derlenmek' degil
<mengus> ama cpu'da daha onceden derlenmi$ bir program
tarafindan 'i$leniyor'
<mengus> (process ediliyor)
* aib kissadan hisse: bilgisayara verdiginiz her turlu deger
(sayi olsun isim olsun renk olsun) hafizaya yazilirken sayilara
donusturuleceginden, bu degerin _turunun_ ne oldugunu iyi bilmeniz gerekir.
<mengus> ve binbir dereden su getirmek suretiyle internet
uzerinden sizlere ula$iyor
03/07/22 21:13:48 * aib ornegin bilgisayar hafizasinda "sari" rengi de "ahmet"
ismi de 1293823 sayisina denk geliyorsa, hafizadan "1293823" degerini
aldiginizda bunun "sari rengi" mi yoksa "ahmet ismi" mi oldugunu bilmek icin
onceden belirlediginiz ture bakmak zorundasiniz.
<cortez> hiii
<cortez> ama
<cortez> senin attigin mesaj
<cortez> 010 hedhˆd diye bana gelip benim cpu mda proses
edilio dimi
<aib> cortez: evet
<aib> su anda ekranda gordugunuz hersey bi sayi, cesitli
programlar tarafindan harflere ve harflerden latin alfabesine donusturulerek
bize sunuluyor
<cortez> oha ekranda gˆrd¸g¸m imajlardami sayi
<detay_PRG101> hersey
<cortez> bi an acidim cpu lara
<mighty_smite> binary sayilar kayiyor her yerden yiyom kafayi
<detay_PRG101> dinledigin mp3 ler de
<ferss> matrix!
<detay_PRG101> imajlarda
<detay_PRG101> videolarda
<mengus> teorik bir ilginclik sunayim sizlere
<Arbalest> bu askerdeki hiyerar$i gibi degil mi, yani sizin
burada yazdIgInIzdan en son derlenen program ya da script sorumlu? yani
Áavu$ varken generale ÁIkamIyorsun
<emirhan> ps7 $ifre arIom acele
<cortez> emihan oha
<coldplay> cpu yu yormayan tek$ey audio cdler sanIrIm
<mengus> ornegin bir resim dosyasiyla bir mp3 dosyasinin
header (tanim) kisimlari haricinde kalan tum yerleri ayni olabilir
<cortez> hayir
<cortez> onlarda bence
<mengus> bunlari farkli programlar yorumladiginda
<mengus> farkli sonuclar ortaya cikar
<coldplay> eger ses cdromun kartIna baglIysa...
<syk> cpu aslInda yorulmaz!
<mengus> pratikte cok mumkun degil ancak, imkansiz degil.
<aib> mengus: o header'i da o dosyanin "type"i olarak
dusunebilir miyiz... int, string, mp3, jpeg gibi ?
<UnConscious> matrix'te 2,3,5 gibi 10 tabanlI sayIlar yanInda
Áin alfabesinden harfler de akIyor, yani bu adamlar binary nedir bilmiyorlar
mI yoksa ne?
<cortez> yani ben mp3 ¸ acdsee ile aÁsam
<cortez> ?
<mengus> aib: evet du$unulebilir
<Ancyreum> ya bisi sorcam belki aptalca olcak ama
<Ancyreum> eskiden oynadIgIm atari, amiga gibi makinelerde cpu
esasIna mI dayaniyordu ?
<mengus> coldplay: orada da cd'den gelen veriyi ses kartinin
i$lemcisi i$ler. CPU yorulmaz ama arada yine bir i$lemci var.
<Ancyreum> yani aynI i$lemler onlar icinde gecerlimiydi
<mengus> Ancyreum: evet.
<mighty_smite> UnConscious : artizlik yapior onlar
bilmediklerinden degil
<cortez> o halde $ˆyle bi baglantikurabiliriz mesaj olayinda
<cortez> client>server>client2 cpu hmm
<mengus> hatta buzdolabinda da gecerli ayni i$lemler :)
<Ancyreum> ciddimisin ?
<cortez> mengus: ordadami 0101 var?
<mighty_smite> bu mola uzarsa hayatin anlamina giricez
<coldplay> mengus: ucuz ses kartlarInda da var mI bu i$lemdci?
<cortez> coldplay: hayir sanirim
<mengus> evet herkes tamam mi
<aib> coldplay: hepsinde var
<cortez> bi$i daha sorcam
<cortez> son
<Ancyreum> evet
<cortez> 010110 i$lemleri sadece ve sadece cpu da oluyo dimi
keran kartinda falan olmuyo
<aib> yoo her yerde var
<compumaster> heheh.
<detay_PRG101> cortez: bildigin tum elektronik donanim binary
data i$liyor
<aib> ekranin kapatma dugmesine bastiginda bile bi yerlere
010101'ler gidiyo
<compumaster> aklIna gelen heryerde var cortez.
<detay_PRG101> cep telefonlari bile
<compumaster> saatlerde arabalarda bile
<mengus> ba$ka sorusu olan? onceki konularla ilgili kafasina
bi$eyler takilan?
<aib> hatta ben bile 0-1'lerlen isliyorum ama caktirmiyorum
<detay_PRG101> sesi 1 ve 0 lara donusturup yolluyor
<mighty_smite> 8 brilik teknoloji harikasi : cep telefonlari
<mighty_smite> heh
<cortez> hmm o zaman bu bitler Áok az elektrik harcio
<SSG> "dijital" olan her $ey 0-1'le cali$ir
<aib> ba$ka sorusu olan? onceki konularla ilgili kafasina
bi$eyler takilan?
<detay_PRG101> cortez: nasil 1 ve 0 sese donu$ur, anlamak
istersen eski ta$ plaklari incelemen gerekir.
<Ancyreum> int konusunun bi daha ustunden gecebilirmisin?
<mengus> Ancyreum: tabii, nesinin?
<aib> ben toparliyim mi?
<detay_PRG101> plak uzerinde birsuru cukur ve tepecik sese
donusur
<detay_PRG101> temel prensip aynidir
<Ancyreum> 32 bit ve int olayi
<mengus> tam olarak nesini anlamadin, oyle anlatalim
<Ancyreum> aslInda int i hiÁ annlamadIm i$te
<mengus> ok
*** Mode "+m" by mengus
<mengus> bir int'in ustunden gecip
<mengus> sonra reserved keywordleri anlatacagim
<mengus> $imdi int dedigimiz veri tipi,
<mengus> "tamsayi" degi$kenleri depolamak icin kullanilir,
integer'in kisaltilmi$idir
<mengus> tamsayilar kumesi, ilkokul bilgilerimiz i$iginda
bildigimiz kadariyla
<mengus> 'sonsuz' bir kumedir
<mengus> ancak ne i$lemcimizin i$lem gucu, ne de hafizamiz
sonsuz olmadigindan
<mengus> 'bilgisyarin kullanabilecegi tamsayilar kumesi'
'sinirli' olmak zorundadir
<mengus> bu sinir ise
<mengus> bilgisayardan bilgisayara degi$ir
<mengus> kimi bilgisayarlarda 16 bit (yani 16 haneli, ikilik
tabanda bir sayi) kimilerinde 32- bit vs olabilir
<mengus> 16 bitlik bir tamsayinin degeri
<mengus> + 2 ¸zeri 16 ile -2 ¸zeri 16 arasinda degi$ir
<mengus> ki bu da +/- 65536 demektir
<mengus> burada anla$ilmayan bi$ey kaldi mi?
03/07/22 21:25:35 *** Mode "-m" by mengus
<Ancyreum> yok tesekkur ederim mengus
<mengus> tamam
<mengus> devam ediyoruz o zaman
*** Mode "+m" by mengus
<mengus> $imdi her programlama dilinde 'reserved keyword'
denen, onceden programlama dilinin kendisine ayrilmi$ kelimeler vardir
<mengus> ornegin 'if' hemen hemen her programlama dilinde ozel
bir kelimedir
<mengus> ozel kelimelerin "ozel"liklerinin kaynagi, dilden
dile degisir, genellikle bu isimlerde fonksiyon ya da degisken tanimlanamaz
<mengus> cok onemli bir kavram olmasa da, uzerinden gecmek
gerektigini du$undum
<mengus> $imdi aib, 'statement' kavramini anlatacak
<aib> statement'lar ise cok onemli bir karamdir :)
<mengus> :)
<aib> sanirim turkce karsiligi "beyanat" olmakla birlikte
<aib> programa ne yapacagini anlatirlar
<aib> bi programda yazdiginiz seyin COGU statement'tir
<aib> su ki;
<aib> bir program yazmak istiyorsunuz, ve yapacagi sey cok
basit
<aib> kullanicidan bir deger alacak
<aib> bunu daha sonra tekrar gorebilmek icin bir variable'a
kaydedicek
<aib> ve bu degeri ekrana bastiracak
<aib> aslen yazdiginiz dile ve yazis stilinize gore degisse de
<aib> boyle bir program uc statement'tan olusur:
<aib> 1) kullanicidan degeri al
<aib> 2) degeri degiskene kaydet
<aib> 3) degiskendeki degeri ekrana yaz
<aib> gordugunuz gibi, programda yapacaginiz her 'i$' icin bir
statement gerekmektedir
<aib> statement'lar kod stili guzel insanlar tarafindan
yazildiginda genelde bir satira bir tane dusecek sekildedir
<aib> yani program statement (enter) statement (enter)
seklinde yazilir
<aib> hatta asp ve basic gibi dillerde, tek bir satira bir
statement yazilabilir en fazla <enter>la
algilanir
<aib> bunun disinda her dilin kendine ozgu bir statement
bitirisi vardir ama buna fazla deginmeye gerek yok
<aib> bi programin ne yaptigini anlayabilmek icin once
kodundaki statement'lari ayirip ona gore incelemeniz gerekir
<aib> ayni sekilde yazarken de, programin yapacagi isi
statement'lara ayirip oyle yazarsiniz
<aib> yani dedigim gibi "kullanicidan bi sayi alip bunu
degiskene koyup ekrana yazan program"i ben 3 statement'a ayirdim
<aib> 1) al 2) koy 3) yaz seklinde.. yukarda yazmistim
<aib> mengus'cugum 3 soru var, ben onlara bakarken sen
statement delimiteri kisaca gecer misin ?
<mengus> ok
<mengus> 'statement delimiter' denen $ey
<mengus> programlama dilinin 'compiler'inin ya da scripting
dilinin 'interpreter'inin
<mengus> 'bu statement bitti' yi algilamasina yarar
<mengus> aib'nin bahsettigi gibi
<mengus> visual basic gibi dillerde
<mengus> bu 'new line' yani 'yeni satir' karakteridir (enter'a
bastiginiz zaman ortaya cikan budur)
<mengus> c dilinde ";" karakteri
<mengus> bir statement'in sonlandigini gosterir
<mengus> bu da demektir ki c'de 'ayni satira' birden cok
statment yazilabilir
<mengus> statement1; statement2;
<mengus> gibi
<mengus><UnConscious> bir statement birden fazla satIr tutabilir
mi peki? bunu da cevaplamis olduk sanirim
<mengus> evet :)
<mengus> ancak dedigimiz gibi
<mengus> her programlama dilinin 'delimiter'i yani
'sinirlayicisi' farklidir
<mengus> kavram hakkinda sorusu olan?
<aib> ok
<tuonela> bu verdigin basit ˆrnegi bir dilde yazabilir
misin C falan
<aib> ve beraberinde
<Ancyreum> degiskeni kullanIcIdan al
<Ancyreum> ekrana yaz olmaz mI?
<Ancyreum> illa degi$kene yazmak zorundamI?
<aib> Ancyreum onceki ornegimi iki statement'ta dusunmus
<aib> 1) kullanicidan degeri al ve degiskene aktar
<aib> 2) degiskeni ekrana yaz
<aib> dedigim gibi, herkes ayri dusunebilir bu konuda
<aib> hatta bunu 4 kerede yapmak da mumkundur:
<aib> 1) kullanicidan degeri al a'ya yaz
<aib> 2) b'ye a'nin degerini yaz
<aib> 3) c'ye b'nin degerini yaz
<aib> 4) c'yi ekrana yazdir
<aib> sonucta ortadaki problem belliyse buna gore bir sonuc
elde etmek sizin elinizdedir
<aib> ve bu baglamda yazdiginiz programlar farklilik
gosterecektir
<Zeus> statement ile dos' ta prompt' a yazdigimiz komut
e$degerdir diyebilir miyiz?
<aib> bi baglamda diyebiliriz
<aib> aslinda dos'un da cok basit bir programlama (scripting)
dili vardir: bat dosyalari
<aib> bat dosyalari, ENTER ile ayrilmis komutlardan ibarettir
<aib> simdi c'den ornek birkac statement yazacagim
<aib> tuonela'nin istegi uzerine
<aib> yalniz ornege fazla kafa yormayin
<aib> int c;
<aib> c = kullanicidanTamsayiAl();
<aib> printf("%i\n", c);
<aib> hemen aciklamasini geciim
<aib> statement 1: int c; c'yi bir tamsayi olarak belirle
<aib> statement 2: c = kullanicidanTamsayiAl(); kullanicidan
tamsayi alip bunu c degiskenine yaz
<aib> statement 3: printf("%i\b", c); bu degeri ekrana yazmak
icin printf komutunu kullan
<aib> bu program kesinlikle 3 statement'dan olusmak zorunda
degildir ama benim aklima gelen bu ornekti
<aib> buradaki kullanicidanTamsayiAl ve printf ise birer
fonksiyon iyi
<aib> fonksiyonlarin ne oldugunu anlatmasi icin mengus'a
mikrofonu uzatiyoruz...
<mengus> :)
<aib> eger sorusu olan yoksa
*** Mode "-m" by aib
<tuonela> burada bir tamsayIyI bir fonksiyon olarak belirledik
<aib> hayir buradaki tamsayi c
<tuonela> c = .. dedik sonra?
<aib> kullanicidanTamsayiAl ise tamsayi verecegini umdugumuz
bi fonksiyon
<mengus> tuonela: az sonra anlatacagim onun nasil yazildigini
<tuonela> tamam
<mengus> ve niye boyle gorundugunu
<aib> statement'lar anlasildi mi?
<Ancyreum> evet
<tuonela> eet hocaam
<aib> yukardaki program tek bir statement'ta da yazilabilirdi
<aib> yazmiyorum :)
<mengus> :))
<Ancyreum> :)
<mengus> devam ediyorum?
*** Mode "+m" by mengus
<aib> tabi
<mengus> "Fonksiyon nedir, yenir mi?"
<mengus> bir fonksiyon (function) bir i$i yapmak uzere
yazilmi$ bir kod blogudur
<mengus> kod blogu nedir?
<mengus> bir 'statement lar grubudur' yani ornek bir fonksyon
tanimi $oyle olabilir
<mengus> function ornek() {
<mengus> statement1;
<mengus> statement2;
<mengus> }
<mengus> burada parantez icinde bu { ve } nedir onu anlatayim
<mengus> bunlar da 'kod blogu sinirlayicilari'dir
<mengus> ve statement sinirlayicilari gibi, her dilde farkli
olabilir
<mengus> az evvel verdigim ornek
<mengus> c ve benzeri dillerde kullanilan sinirlayicilar idi
<mengus> ancak ornegin visual basicte
<mengus> function ornek()
<mengus> statement 1
<mengus> statement 2
<mengus> end function
<mengus> $eklinde kullanilir
<mengus> 'ba$i belli sonu belli bir kod bloguna fonksyon
denir'
<mengus> fonksyonlar temel olarak ikiye ayrilir:
<mengus> - bir deger donduren fonksiyonlar
<mengus> - bir deger dondurmeyen fonksiyonlar
<mengus> bir deger dondurmek ne demektir, en iyi $ekilde bir
ornekle anlatilabilir:
<mengus> function kare(x) {
<mengus> return x*x;
<mengus> }
<mengus> bu yazdigimiz fonksiyon x 'parametre'sini alir
<mengus> ornegin
<mengus> kare(2)
<mengus> dedigimiz zaman bu fonksiyonun 'dondurecegi' deger
<mengus> 4
<mengus> olacaktir
<mengus> az evvel aib'nin yazdigi ornek koddaki
<mengus> kullanicidanTamsayiAl()
<mengus> fonksiyonu da, tam sayi donduren bir
<mengus> fonksiyondur (halihazirda boyle bir fonksiyon yoktur
tabii, karisiklik olmasin:))
<mengus> dolayisiyl
<mengus> a
<mengus> int x
<mengus> x= kullanicidanTamsayiAl();
<mengus> dedigimizde
<mengus> x'i bu fonksiyona degil
<mengus> bu fonksiyonun dondurdugu degere e$itlemi$ oluruz
<aib> benim umdugum sekilde calisiyorsa kullanicinin ekrana
yazdigi bilgiyi tamsayiya cevirip x'e koyacaktir... di mi ?
<mengus> evet
<mengus> deger dondurmeyen fonksiyonlar ise, tahmin ettiginiz
uzere, bir deger dondurmeyen (en kotu ihtimalle "0" donduren)
fonksiyonlardir
<mengus> deger dondurmeyen bir fonksiyon neye yarar peki
diyeceksiniz
<mengus> hemen $oyle anlatayim
<mengus> function imdat() {
<mengus> polisiAra;
<mengus> }
<mengus> bunun bir deger dondurmesine gerek yoktur,
<mengus> polisiAra statement'ini calistirir
<mengus> cok fiktif bir ornek oldu ama umarim anla$ilmi$tir
<mengus> buraya kadar anla$ilmayan bir $ey var mi? zira onemli
bir konu bu
*** Mode "-m" by mengus
<cortez> if evde hirsiz var; imdat(); ? $eklindemi Áagrilio
imdat
<aib> cortez: if nedir ?
<tuonela> ehehe
<Ancyreum> :)
<aib> mengus: benim belirli 4-5 tane statement'i devamli
olarak kullanmam lazim. n'apiim her seferinde copy paste mi ediim gereken
yere?
<cortez> :) yani anla i$te
<mengus> cortez: istedigin $ekilde cagirabilirsin
<mengus> ancak bu fonksiyon bir deger dondurmuyorsa
<mengus> ve eger dil deger dondurmeyen dilleri buna uygun
$ekilde handle etmiyorsa
<mengus> x=imdat()
<mengus> dediginde erroru yersin :)
<tuonela> hocam peki
<F5> Áok pardon bu ne dersi ? asp mi
<cortez> ha yani function lar programlar Áali$tirildiginda
i$lenmior dimi ancak Áagrildiginda
<aib> PRG101
<Ancyreum> :)
<aib> cortez: evet
<mengus> cortez: evet
<aib> mengus: benim belirli 4-5 tane statement'i devamli
olarak kullanmam lazim. n'apiim her seferinde copy paste mi ediim gereken
yere?
<tuonela> x = kullanicidantamsayial() dendiginde parantez
icine bi$ey yazIlmalI mI
<mengus> aib: ok
<mengus> tuonela:
<mengus> fonksiyonun tanimina gore
<mengus> ornegin demin yazdigim kare(x) fonksiyonunda
<mengus> x gerekli bir parametredir
< if evde hirsiz var; imdat(); ? $eklindemi
Áagrilio imdat> hala dondurmeyen fonksiyon mu bu durumda
<aib> coldplay: bilmiyoruz fonksiyonu gormedik
<SSG> olur mu
<mengus> ancak, kullanicidantamsayial() fonksiyonunun
taniminda
<mengus> function imdat() {
<mengus> polisiAra;
<mengus> }
<mengus> eger gerekli bir parametre tanimlanmami$sa
<mengus> bir $ey yazmak gerekmez
03/07/22 21:55:00 *** Join: hmmzie (hmmzie@195.174.127.irc-21488)
<SSG> function polisiAra() {
<mengus> coldplay: fonksiyonun nasil cagirildigi ile degil,
nasil tanimlandigi ile ilgilidir
<SSG> dial("155");
<mengus> deger dondurup dondurmeyecegi
<tuonela> eheheh
<SSG> if(problem) return -1; else return 0;
<SSG> }
<cortez> ˆeh
<cortez> :)
<tuonela> ;)
<mengus> SSG: boyle olsa bile
<aib> kendim bi soru sorup cevaplayabilir miyim?
<cortez> SSG: comment ta koy yanina aÁiklama olarak :)
<mengus> sonucta imdat fonksiyonundan bir $ey dondurmedigim
surece, di$ariya bir $ey donmeyecektir
<mengus> ancak bunlar ile kari$tirmanin anlami yok $u a$amada
<SSG> "problem" burada global bir degi$ken.. dial'da problem
olursa icini duruma gore 0 ya da -1 yapiyor
<coldplay> padon bi$i sorcam ... degi$ik verilerle degi$ik
sonuÁlar veren fonk. mu donduren oluyor?
<mengus> coldplay
<mengus> hayir
<aib> eveet
<mengus> her fonksiyon degi$ik verilerle degi$ik sonuclar
verebilir
<aib> sana diildi
<tuonela> eheheh
<mengus> sonuc vermeyebilir
<mengus> her $ey olabilir
<cortez> SSG: 0 ve -1 hayir ve evete mi tekabul ediyo
<mengus> ornegin
<aib> cortez: ssg nasil tanimlarsa oyle
*** Mode "+m" by mengus
<SSG> cortez: ben uydurdum kafadan
<mengus><coldplay> padon bi$i sorcam ... degi$ik verilerle degi$ik sonuÁlar veren fonk. mu donduren oluyor?
<mengus> buna cevap vereyim
<mengus> bir fonksiyon di$aridan veri alabilir
<mengus> kare orneginde oldugu gibi
<detay> ozetle, bir fonksyion bir deger dondurebilir yada
dondurmeyebilir. bu tamamen ihtiyaca yonelik bir hadise.
login(username,password) size isim $ifrenin ba$arili olup olmadigini
dondurebilir, ama mesela playSound() fonksiyonu sadece ses cikartacaktir,
sesini cikartir bir deger dondurmez
<mengus> ya da almayabilir
<mengus> kullanicidantamsayial
<mengus> da oldugu gibi
<mengus> fonksiyonun deger alip almamasiyla bi$ey dondurup
dondurmemesinin baglantisi yoktur
<mengus> bir fonksiyona 'bu degeri dondur' demedigimiz surece
bir deger dondurmez
<mengus> kare fonksiyonuna c dilinde 'bize x*x in degerini
dondur' dedik
<mengus> ancak imdat() fonksiyonuna hic bir $ey dondurmesini
soylemedik
<mengus> fonksiyonun bir $ey dondurmesi demek ise $udur
<mengus> 'bu fonksiyon cali$tigi zaman, tanimlandigi veri
tipinde bir deger olarak kullanilabilir'
<mengus> x=kullanicidanTamsayiAl()
<mengus> daki gibi
<mengus> kullanicidanTamsayiAl() fonksiyonu diyelim ki 3
degerini dondurdu bize
<mengus> x=3
<mengus> demek ile ayni kapiya cikar bu
<mengus> ya da
<mengus> x=kare(3);
<mengus> dersek
<mengus> x'in degeri 9 olacaktir
<mengus> anla$ilmayan bir yer?
*** Mode "-m" by mengus
<detay> kare bir$ey dondurmez ise hata alinacaktir
<detay> kare() daha dogrusu
<SSG> fonksiyonlara programlama dilinde neden ihtiyac
duyuldugundan bahsetmi$ miydik?
<tuonela> kullanIcIdantamsayial() fonksiyonu duruma gˆre nasil
farkli degerler dˆnd¸recek
<aib> evet fonksiyonlardan bahsederken sonlarina () koymakta
fayda vardir
<mengus> SSG: sen bahset istersen
<aib> tuonela: kullanici 3 yazarsa 3 dondurucek
<aib> tuonela: 5 yazarsa 5
<SSG> bahsedeyim
*** Mode "+m" by mengus
<SSG> efendim fonksiyonlar program yazmayi kolayla$tirmak icin
yaratilmi$lardir
<SSG> bir programi yazarken surekli tekrar eden ortak
i$lemleri bir fonksiyonda toplayip kisaltmamizi saglar
<SSG> bu ayni zamanda programimizin ayni i$i muhtelif yerlerde
yapan parcalarinda sadece fonksiyonu degi$tirerek tum programi
guncelleyebilmemizi saglar
<SSG> ornek vereyim basitce
<SSG> butun ek$i sozluk yazarlarinin nick'lerini sonuna " beni
yakalayamaz ki" diye yazan bir program yazacagiz
<SSG> bunun icin seceneklerimizden biri
<SSG> alt alta "mengus beni yakalayamaz ki" "aib beni
yakalayamaz ki" yazdiran bir kod yazmak olabilir
<SSG> yazayim hemen
<SSG> print "mengus beni yakalayamaz ki"
<SSG> print "aib beni yakalayamaz ki"
<SSG> print "michael jackson beni yakalayamaz ki"
<SSG> gordugunuz uzere cok fazla efor harcadim ve terledim
<SSG> oysa ki bir fonksiyon yazsam
<SSG> function yaz(kim) {
<SSG> print(kim+" beni yakalayamaz ki");
<SSG> }
<SSG> sonrada programimi
<SSG> yaz("mengus");
<SSG> yaz("aib");
<SSG> yaz("michael jackson");
<SSG> a cevirsem gordugunuz uzere efordan kazandim
<SSG> ayrica "yakalayamaz ki" cumlesinde bir yazim hatasi
yapmi$ olsa idim tum source'u ba$tan editlemem gerekecekti
<SSG> oysa ki bunda sadece fonksiyonu degi$tirmem yeterli
<SSG> ben yaz fonksiyonunu
<SSG> function yaz(kim) {
<SSG> print(kim+" hayvanin tekidir");
<SSG> }
<SSG> olarak degi$tirsem programimimin ciktisi da buna gore
degi$ecekti
<SSG> fonksiyonlari olu$turmamizin amaci da programlarimizi
boyle moduler parcalara bolup kodlamamizi kolayla$tirmak ve anla$ilir hale
getirmektir
<SSG> sorusu olan?
*** Mode "-m" by SSG
<aib> ** ayrica fonksiyonu uste mi alta mi yazacaginizi hic
dusunmeyin, simdilik "fonksiyon" konseptini anlayin yeter... konsept
anlatiyoruz cunku.. dilden dile degisir neyi nereye yazacaginiz **
<Ancyreum> tamam sorun yok
<mengus><tuonela> bir fonksiyon ba$lI ba$lIna bir kodun b¸t¸n
olanaklarIna sahip midir?
<mengus> buna cevap vereyim
<mengus> bir fonksiyon, kendi icerisinde fonksiyon icermek
haric, fonksiyon di$inda yapilabilecek her $eyi icerebilir
<mengus> yani bir fonksiyonun icinde baska bir fonksiyon
tanimlayamazsiniz
<mengus> bunun di$inda her $eyi yapabilirsiniz
<tuonela> ama cagirabiliriz*
<tuonela> ?
<mengus> evet
<tuonela> cok $Ik
<mengus> bir fonksiyonun icinden ba$ka bir fonksiyonu
cagirabilirsiniz
<mighty_smite> recursive functionlar ornek cagirmaya mesela
<tuonela> ˆyledir de biz bilmiyoz onnari daa ;(
* detay notu: fonksiyon icerisinde fonksyion cagirilabilir, sadece fonksiyon bloku icerisinde yeni bir fonksiyon tanimlanamaz
<aib> dilden dile degismez mi o?
<mengus> benim bildigim kadariyle degi$mez. yanli$im varsa
duzeltin
<mengus> ok
<aib> benim de aklima gelmiyo ama kesin laf etmeyelim dedim
<mengus> $imdi
<SSG> object pascal'da (delphi) fonksiyon icinde fonksiyon
tanimlanabilir
<tuonela> o yea
<tuonela> bu cok iyi
<mengus> demek ki tanimlanabildigi diller de varmi$ :)
<Ancyreum> :)
<tuonela> sonra o tanImlanan fonksiyonda tekrar ba$takInI
cagIrarak loopa da sokarIz off ;)
<UnConscious> ˆyle bir durumda iÁeride tanImlanan fonksiyon
birinci fonksiyon i$ yaptIktan sonra silinir mi?
<mighty_smite> dikkat et infinite loop'a sokma :)
<aib> UnConscious: hayir fonksiyonlar kod olduklari icin
silinmez
<Arbalest> minicik bi$ey sorabilir miyim
<mengus> Arbalest: tabii
<Arbalest> $imdi efenim, bizim bu dersteki amacImIz,
delimeter, fonksiyon, compiler gibi $eyleri duydugumuzda apI$mamak degigl mi
<aib> aynen oyle
<caesar> :)
<mengus> eh evet. ayrica diger programlama dilleri ile ilgili
dersleri rahatca kavramak
<tuonela> hehe
<mengus> SSG: yok daha diil :9
<Arbalest> yani biraz fazla ˆgrenme arzusuyla yanIp
tutu$uyoruz gibi geldi bana
<Arbalest> zannedersem $u anda fonksiyon yazmak durumunda
degiliz biz Áˆmezler
<mengus> Arbalest: tabii degiliz
<mengus> digerlerini de i$lemek iyi olur gibi geliyor bana
<mighty_smite> arrayleri falan da isleseydiniz
<mengus> mighty_smite: gun gelir sen i$lersin
<mengus> ok
<mengus> devam o zaman
*** Mode "+m" by mengus
<aib> son bir ornek fonksiyon yaziim gecelim mi mengus?
<mengus> $imdi kahtali aib sizlere i/o mekanizmalarini
anlatacak
<mengus> diyordum ki
<mengus> yaz da gecelim :)
<aib> function topla(x, y) {
<aib> z = x + y;
<aib> return z;
<aib> }
<aib> simdi bu fonksiyon, parametre olarak x ve y aliyo
<aib> sonra icinde bunlari toplayarak z'ye koyuyo
<aib> sonra z'yi donduruyo
<aib> yani
<aib> baska bi yerde
<aib> a = topla(5,5); yazarsak a'nin degeri 10 oluyor
<aib> fonksiyon boyle olsaydi
<aib> function topla(x, y) {
<aib> z = x + y;
<aib> return 1;
<aib> }
<aib> a = topla(5,5); dedigimizde a'nin degeri 1 olacakti
<aib> cunku fonksiyonun dundurdugu deger (return'un yanindaki)
1
<aib> ustte z'yi donduruyodu, z de x ve y'nin toplamina esitti
<UnConscious> return yazmasak da direk print(z) diyerek
z'nin degerini yazdIrabilir miydik?
<aib> bazi diller fonksiyon icinde tanimli degerlerin disa
cikmasini onluyor
<mengus> araya girmek gibi olacak
<mengus> ozur dileyerek
<aib> mesela c'de olsa print(z) dedigimizde C bize "z ne ulan"
derdi
<mengus> $unu ekleyeyim:
<mengus> return yazmasak, print(z) yazsak,
<mengus> z'nin degerini ekrana yazdirirdik
<mengus> ancak
<mengus> a=topla(3,5);
<mengus> dedigimizde
<mengus> a'nin degeri 8 olmazdi
<mengus> ekrana 8 yazilirdi, ancak a tanimsiz -ya da fonksiyon
ne donduruyorsa o- olarak kalirdi
<mengus> te$ekkur ederek susuyorum yine :)
<aib> (ikinci return 1 ornegine deginerek)
<orqan> o hal$de bunu yapmak salaklik degil mi? yani
naaparsan yap sonuc ayni?
<orqan> niye kullanioruz yani bunu? yapior muyuz bole
seyler?
<aib> tabii, topla() gibi bi fonksiyona toplam yerine 1
dondurmek kulliyen salaklik
<aib> lutfen rezilligimi yuzume vurmayin
<SSG> salak aib
<aib> ssg: lutfen dedim!
<hadara> direk return (x+y) diyemezmiydik peki?
<mengus> :)
03/07/22 22:18:37 * detay notu: bir onceki kod hatali bir kodun ornegidir, aib
bu konuda zaten gereken uyariyi yapti
<aib> gayet rahat derdik return x+y
<aib> ama iste ben 2 statement kullanmayi tercih ettim
<aib> z = y + x;
<aib> return z;
<aib> hadara tek kullanmayi tercih etmis, return y+x
<aib> simdi I/O olayina girmek istiyorum
<aib> derken...
<lhr> y+x*y desek ne olurdu peki
<aib> dil "y+x*y"ye ne deger veriyosa onu dondururdu
<aib> return y+x*y dedigimizi varsayiyorum
<aib> normal bir dil once x ve y'yi carpip sonuca y eklerdi ve
en son sonucu dondururdu
<aib> ama dedigim gibi bu bi konsept dersi, sizin
programladiginiz dilde * isareti "cikartma" anlamina gelirse ona gore
hareket eder
<aib> "I/O"ya gecmeden mengu bisiy diyicekmis:
<mengus> bir 'best practice' olarak
<mengus> islem onceligini dilin insafina birakmamanizi
oneririm
<mengus> carpma islemi toplamadan once yapiliyor olsa bile
<mengus> return y+(x*y)
<mengus> diyerek parantez kullanmanizi tavsiye ederim
<mengus> bu kadar, buyrun sayin aib
<aib> efenim I/O dedigimiz sey, input/output'un acilimi
<aib> gulmeyin ama turkcesi "girdi/cikti"
<aib> bilgisayarlarda, hatta muhendislikte her yerde
kullanilir
<aib> ama ben 2 onemli yerine deginecegim
<aib> 1) program icin girdi cikti
<aib> dedigimiz gibi program bilgiyi 'islemekle' yukumludur
<aib> bu manada, programa 'giren' her veri 'girdi/input',
cikan her veri de 'cikti/output' olarak belirtilir
<aib> yalniz, program KODU ve DEGISKENLERI ile bir butun
sayildigindan
<aib> programin bir degiskene bisiy yazmasi
<aib> veya bir degiskenden deger okumasi INPUT, OUTPUT veya
I/O olarak nitelendirilemez
<aib> bunun disinda, programa 'disardan' gelen veriler
"input", programdan 'disariya' cikan veriler "output"tur
<aib> ornegin yine hesap makinesi programimizda
<aib> kullanicinin girdigi sayilar ve yapacagi islem,
kullanici tarafindan girilen 'input'lardir
<aib> cikti ise hesap makinesinin ekranina giden, islemin
sonucu, yani 'output'tur
<aib> konsept olarak baktigimizda,
<aib> PhotoShop
<aib> resim dosyasi 'girdisi' alan ve yine resim dosyasi
'ciktisi' veren bi program diyebiliriz
<aib> mengus beyin yazdigi SourSummitz de, zirve girdisi alan
ve hangi tarihte ne zirvesi oldugu ciktisini veren
<aib> bir organizasyon programi diyebiliriz
<aib> kabaca :)
<mengus> cok kabaca oldu, ama olsun, diyelim :)
<aib> pardon :)
<aib> 1) demistik, I/O'nun benim bahsedegim ikinci yonu ise
kullanici tarafidir:
<aib> 2) kullanici tarafi
<aib> bu ise cok daha basittir, bir program EGER kullanici ile
haberlesecekse, kullanici ona girdi verir ve cikti alir
<aib> programin kullanici ile haberlesen bolumune UI (user
interface/kullanici arabirimi) denir
<aib> eger bu arabirimde butonlar, resimler, cicekler varsa bu
UI bi GUI'dir... (GRAPHIC user interface/GRAFIK kullanici arayuzu)
<aib> girdi ve cikti islemlerinin tamamini (yani hem 1. hem 2.
dedigimiz seyleri) Isletim Sistemi araciligiyla yapar
<aib> isletim sistemi, kendisi icin yazilacak her dildeki
programlara, I/O kullanabilmesi icin cesitli fonksiyonlar bahsetmistir
<aib> mesela bi programin kullanicidan bir girdi almasi icin
klavyeyi bilmesi, tus vuruslarini dinlemesi gerekmez
<aib> program C ise scanf() gibi komutlar mevcuttur... PHP ise
zaten girisini web uzerinden yapmaktadir
<aib> pardon komut degil fonksiyon olucak scanf()
<aib> benzer sekilde, butun orneklerde gordugunuz gibi program
ciktilari "print" "echo" gibi fonksiyonlarla yapilmaktadir
<mengus> ne yapar bu scanf() fonksiyonu?
<aib> eger programin calistigi isletim sistemi veya script'i
interpret eden interpreter bu print komutunu bize bahsetmeseydi,
<aib> bizim programimiz ekran kartinin ayarlarindan tutun,
latin alfabesinin monitorde nasi gozukecegine kadar her seyini kendisi
hesaplamasi gerekecekti
<aib> oysa biz "print" dedigimiz anda topu isletim sistemine
atiyor, ve bunyesindeki fontlari vs. kullanarak guzel bir cikti vermesini
sagliyoruz
<aib> mengus: cok deginmek gereksiz olacak fakat, scanf(),
C'nin standart kutuphanelerinin birinde bulunan basit bir girdi
fonksiyonudur
<aib> hatali yazmaydiysam scanf("%i", &c); gibi bir ornekte,
ekrana yazilan tamsayiyi 'c' degiskenine aktaracaktir
<hadara> mouse pointer'in yer degi$tirmesi bir program
icin girdi midir? kodlarin mouse pointer'i onemsedigini varsayarsak...
<aib> 'onemseme' olayina iyi degindin, saniyede yuzlerce I/O
olan bi isletim sistemi bunlarin hepsini her programa yetistirmez
<aib> yani mouse pointer'i kullanmak istiyosaniz
<aib> isletim sistemine "arkadasim her mouse oynatildiginda
bana haber ver" dersiniz
<aib> ve boylece, isletim sistemi her bu olay oldugunda sizin
programa GIRDI verir... evet bu sizin program icin bir INPUT'tur
<aib> bu konuda anlasilmayan ?
*** Mode "-m" by aib
<tuonela> hatali yazmaydiysam scanf("%i", &c); gibi bir
ornekte, ekrana yazilan tamsayiyi 'c' degiskenine aktaracaktir
<hadara> i$letim sistemine ve programlama diline ragmen
print komutunu kendi elimizle nasil icra ederiz?
<tuonela> burayI anlaˆadIm
<Ancyreum> bu konu daha basitmi$ diyerlerinden oyuzden analdIm
<aib> hadara: isletim sistemini ignore etmek istiyorsan
<aib> hadara: onun yaptigi butun isleri yapmak zorundasin
<aib> hadara: bu yuzden, ekran kartinin destekledigi
cozunurlukten baslayip fontlari filan ayarlaman lazim
<aib> hadara: sonra isletim sistemi senin boyle bi hareket
yapmana izin verirse uzun bir kodla isi halledebilirsin
<aib> tuonela: o mengus'a giden scanf() fonksiyonunun
aciklamasiydi
<mengus> ne yapar bu scanf() fonksiyonu?
<aib> mengus: cok deginmek gereksiz olacak fakat,
scanf(), C'nin standart kutuphanelerinin birinde bulunan basit bir girdi
fonksiyonudur
<aib> hatali yazmaydiysam scanf("%i", &c); gibi bir
ornekte, ekrana yazilan tamsayiyi 'c' degiskenine aktaracaktir
<mengus> araya soktugum icin uzgunum
<mengus> hakikaten gereksiz idi :)
<aib> lafi mi olur
<tuonela> ;) taam
<tuonela> affoldun menguscum ;)
<aib> ama mesela C ogrenmediginiz surece gereginiz olmayacak
scanf()'i bilmeye
<tuonela> ogrencez ama
<aib> kaldi ki ben C bildigim halde kullanmamakta ozen
gosteriyorum
<tuonela> tamam o zaman
<mengus> :)
<tuonela> niye F harfi var hep printf scanf?
<aib> tuonela: bir dosyaya yazdirdigi/okudugu icin
<Arbalest> feminen komutlar bunlar
<mengus> :))
<Arbalest> ˆz¸r dilerim bir daha olmayacak
<tuonela> ;)
<aib> ha diyicen sen diyosun dosya, onceleri ekran dedin
<tuonela> misal dedim
<mengus> kurcalamayalim oralari $imdilik bence
<aib> evet evet gectim
<tuonela> taam
<SSG> "scanf = ks. scan formatted"
<tuonela> tama
<SSG> "printf = ks. print formatted"
<aib> aa dogru ya
<tuonela> m
<aib> dosyalar fprintf
<tuonela> hehe ;)
<Zeus> sondaki f kullanilmazsa ne olur peki? atiyorum c' de?
<tuonela> compile error verir bence
<aib> Zeus: print() fonksiyonu cagrilir
<aib> Zeus: print() fonksiyonu yoksa hata cikar
<aib> Zeus: varsa o kullanilir
<aib> Zeus: printf() tanimli degilken printf() kullanirsan da
ayni sey olur
<aib> veya printdflkjasdflkasdf()
<Zeus> aib: yani ba$inda print olan herhangi bir komut
print()' i mi cagirir?
<cortez> include falanda vardi sanirim
<cortez> bi include olmadan printf olmuodu
<aib> Zeus: hayir C'de cagirmaz
<UnConscious> ama printf() ˆnceden c tarafIndan tanImlI, degil
mi?
<mengus> bi dakika
<mengus> $imdi her $ey cok kari$ti
<mengus> ben toparliyorum hemmen
*** Mode "+m" by mengus
<mengus> $imdi
<aib> UnConscious: hayir C fonksiyon tanimlamaz.. C'nin
kutuphaneleri tanimlar
<mengus> fonksiyon_adi()
<mengus> dedigimiz zaman yalnizca ve yalnizca fonksiyon_adi()
isimli fonksiyon cagirilir
<mengus> fonksiyon_adi1() ile fonksiyon_adi() farkli
kavramlardir
<mengus> eger
<mengus> fonksiyon_adi() isimli fonksiyon tanimli ise
<mengus> calistirilir
<mengus> degilse
<mengus> hatayi yersiniz kafaniza :)
<mengus> yeterli bi aciklama olmu$tur umarim?
*** Mode "-m" by mengus
<aib> hatta diline gore FONKSIyon_adi() ile Fonksiyon_Adi()
ayri fonksiyonlar olabilir
<mengus> sorusu olan yoksa kontrol yapilarini anlatmaya
ba$layacagim
<UnConscious> Fonksiyon_Adi dedigimiz zaman Fonksiyon_Adi()
ÁalI$tIrIlIr mI? yoksa sonuna () koymamIz zorunlu mu
<mengus> UnConscious: dilden dile degi$ir
<mengus> c'de () koymak gerekir
<SSG> pascal'da gerekmez
<aib> UnConscious: o da diline gore... ama programlama
konseptlerinden bahsederken fonksiyon adlarinin sonuna her zaman () koyunuz
<mengus> o parantezleri
<Ancyreum> mengus
<mengus> matematikteki gibi du$unun
<mengus> f(x)=x*4;
<tuonela> oo cok klas
<mengus> eger fonksiyon parametre aliyorsa, parametreleri
parantezlerin icine yazarsiniz
<mengus> yoksa parantezlerin icini bo$ birakirsiniz
<Ancyreum> kucuk bi ara versek , 40 dakkadan sonra odaklanma
sorunlarI ba$lIyor insanlarInda!
<mengus> elbette
<tuonela> o yeah
<Ancyreum> sonra anlattIklarIn bo$a gitmese
<aib> az kaldi zaten
<mengus> bir 5-10 dakikalik mola daha verelim
<mengus> az kaldi
<aib> tek bir ana konu kaldi
<mengus> evet
<SSG> oh yeah!
<detay> mengus: bence son konu biraz daha ilgi alaka ister,
ara verelim bence
<aib> arkadaslar iki soru gecti konuyla alakasi olmadigindan
simdi yanitliyim
<aib> fonksiyon icinde z = y+x; dedikten sonra
<aib> fonksiyon disinda print z dedigimizde ne olacagi dile
baglidir
<aib> ornegin C'de fonksiyon icindeki degerler aksi
belirtilmedigi surece disari cikamaz
<aib> PHP'de filan da oyle
<aib> mengus: disardan icerdeki degeri dondurmeyi diyodu
<mengus> susarim o vakit ve sorarim 'ey halk, devam etmeye
hazir misiniz?'
<Ancyreum> yep
<mengus> sess.. se..ah..sses?
<mengus> ba$liyorum sonra akti koktu demeyin
<aib> fa ister misin mengus'um 440 Hz civarinda>
<mengus> kofteburger: kolay gelsin
<aib> FAAAAA
<aib> sol muydu yoksa
*** Mode "+m" by mengus
<mengus> sol minor.
<mengus> $imdi sira geldi
<mengus> kontrol yapilarina
<mengus> $imdi bunlarin adi niye kontrol yapilari?
<mengus> kodun icinde bir $eyleri kontrol ediyorlar, ce$itli
durumlara gore ce$itli tepkiler veriyorlar
<mengus> ornegin 'eger a degiskeninin degeri 3 ise su kodu
calistir, degilse bu kodu calistir' gibi seyler soyleyebilmemizi saglayan
yapilardir
<mengus> temelde ikiye ayrilirlar
<mengus> conditional (durumsal, duruma gore)
<mengus> ve
<mengus> loop (dongu)
<mengus> yine her dilde farkli yorumlari, farkli
implementasyonlari olsa da
<mengus> temeldeki mantik aynidir
<mengus> conditional yapilar bir durumun dogrulugunu kontrol
ederek hareket ederler
<mengus> bir conditional yapida
<mengus> eger dogrulugu test edilen durum, dogru ise
cali$tirilmasi soylenen kod bir kez cali$tirilir ve gecer
<mengus> looplarda ise
<mengus> 'dogrulugu kontrol edilen durum, dogru oldugu surece'
cali$tirilmasi soylenen kod tekrar tekrar cali$tirilir
<mengus> inceleyecegimiz ilk kontrol yapisi, bir conditional
(durumsal) kontrol yapisi olan 'if...elseif...else'dir
<mengus> her zamanki gibi, yazim tarzina cok takilmayin,
mantigi kavrayin
<mengus> if conditional kontrol yapisi, sundugunuz durumun
dogrulugunu kontrol eder
<mengus> bir basit ornek ile ba$layalim
<mengus> if(a==3) {
<mengus> print "a nin degeri 3tur";
<mengus> }
<mengus> elseif (a==4) {
<mengus> print "a nin degeri 4tur";
<mengus> }
<mengus> else {
<mengus> print "a nin degeri 3 ya da 4 degildir";
<mengus> }
<mengus> $imdi yukarida yazdigimiz kod parcasi ne yapiyor?
<mengus> cumle haline getirelim
<mengus> "a degiskeninin degeri 3 ise 'a nin degeri 3 tur'
stringini ekrana yaz, a'nin degeri 3 degilse, a 'nin degeri 4 mudur? eger
oyleyse ekrana 'a nin degeri 4 tur' yaz. anin degeri 4 de degilse ekrana 'a
nin degeri 3 ya da 4 degildir' yaz"
<mengus> $imdi yukarida yazdigimiz kod parcasi C dilinin
syntaxina goredir
<mengus> ve burada kafaniza takilabilecek en onemli nokta
<mengus> "== nedir? niye = degil de ==?" olacaktir
<mengus> ancak $imdilik buna takilmayin diyecegim
<mengus> c'de esitligi test etmek icin boyle yapiyoruz
<mengus> visual basic gibi dillerde
<mengus> if a = 3 then
<mengus> gibi bir yazim kullanilir
<tuonela> elseifler arttIrIlabilir mi
<mengus> evet
<aib> else if konulmayabilir mi ?
<mengus> gerci elseif kullanimi da dilden dile degi$en bir
durum olsa da
<mengus> kullanilabildigi yerde, istedigimiz kadar elseif
kullanabiliriz
<mengus> 'bu degilse su mu, su da degilse o mu' diyerekten
<mengus> ve evet else if ler konmayabilir
<aib> else koymasak ?
<mengus> if(a==3) {
<mengus> ....
<mengus> }
<mengus> else {
<mengus> ...
<mengus> }
<mengus> diye bir kod da olabilir
<mengus> else'siz bir kod da olabilir
<mengus> zira
<mengus> 'sadece $u ko$ulun dogrulugunu test etmek istiyorum'
diyebilirsiniz
<mengus> ya da 'eger bu ko$ula uymuyorsa, ne olursa olsun $unu
yap diyebilirsiniz'
* detay notu: else if sayisi ne olursa olsun, belirtilen
kosullar disinda kalan her durum icin ELSE bloku kullanilir. else bloku bir
kez kullanilabilir.
<mengus> ilki icin yalnizca bir if, ikincisi icin if...else
kullanirsiniz
<mengus> elbette sadece e$itlik test edecegiz diye bir $ey
yok,
<mengus> if(a>4), if(b<2), if(c>=3)
<mengus> gibi testler yapabiliriz
<mengus> burada her dilin kendine ait bir 'mantik yorumlama'si
vardir
<mengus> if'in icindeki test 'dogru' ya da 'yanlis' olarak
yorumlanir
<mengus> her dilin dogru/yanlis tanimlamalari farkli olabilir
<aib> (conditional statement)
<mengus> ancak bilinmesi gereken
<mengus> if ile test ettigimiz statement DOGRU ise if blogunun
icindeki kod cali$tirilir
<mengus> degilse devam eder.
<mengus> bu konuda anla$ilmayan bir $ey?
*** Mode "-m" by aib
<Ancyreum> yok
<Ancyreum> bu konuda kolaymI$
<tuonela> yok
<tuonela> eheh 2 ki$i kalmI$Iz uyumu$ herkes misal
<UnConscious> bence de yok gibi
<Ancyreum> 2 ki$i dinliyoruz heralde ?
<Ancyreum> :P
<Ancyreum> 3
<Zeus> 4. :)
<Ancyreum> :)
<aib> 5
<detay> 5
<mengus> eheh
<Ancyreum> :)
<tuonela> orqan da var biliuom hissediyom
<mengus> susanlari anlami$ farz ediyorum
<UnConscious> sukut ikrardandir diyelim gecelim
<UnConscious> ?
<mengus> :)
<mengus> ok
<mengus> $imdi conditional statement'larin detaylarina
girmeyecegim
<ilkerz_kodaranz> 6
<Arbalest> valla anladIm ben
<mengus> switch kontrol yapisini anlatacam
<mengus> akabinde aib while ve for dongulerini anlatacak, bu
geceyi kapatacagiz :)
<UnConscious> hocam bi$ey diycem
<Arbalest> iki buÁuk saattir ikrar ediyorum
<SSG> susanlari onemsemeyin onlar suser
<mengus> ahhahaha
<tuonela> mengus
<mengus> evet tuonela?
<tuonela> while ve for da kontrol yapisi di mi ama dˆng¸
<mengus> tuonela: evet
<UnConscious> degi$ken t¸rlerinden yalnIzca integer ve stringi
gˆrd¸k, ba$ka yok mu?
<aib> UnConscious: var ama dile gore degistikleri icin cok
fazla detaya inmedik
<UnConscious> ok :)
*** Mode "+m" by mengus
<mengus> "switch"
<mengus> $imdi, switch dedigimizi 'coklu if' olarak
du$unebilirsiniz
<mengus> yine yazimi dilden dile farklilik gosterir, kimi
dillerde adi bile farklidir, kimi dillerde yoktur ancak populer bir cok
dilde oyle ya da boyle bir 'switch' implementasyonu oldugu icin anlatacagimn
<mengus> yine bir ornek uzerinden gidelim
<mengus> switch(a) {
<mengus> case 1:
<mengus> print "a nin degeri 1":
<mengus> break;
<mengus> case 2:
<mengus> print "a nin degeri 2";
<mengus> break;
<mengus> default:
<mengus> print "a nin degeri 1 ya da 2 degil";
<mengus> break;
<mengus> }
<mengus> bunun aynisini
<mengus> if(a==1) {
<mengus> print "a nin degeri 1";
<mengus> }
<mengus> elseif (a==2) {
<mengus> print "a nin degeri 2";
<mengus> }
<mengus> else {
<mengus> print "a nin degeri 1 ya da 2 degil";
<mengus> }
<mengus> diye yazabilirdik
<mengus> yani yaptigi is ayni. ancak bazi durumlarda
programlama zamanindan (coding time), bazi durumlarda da calisma zamanindan
(run time) kazandirdigi icin tercih edilir
<mengus> $u anda bu farklarin ne olduguna deginmenin pek
anlami oldugunu sanmiyorum
<mengus> burayla ilgili sorusu olan?
*** Mode "-m" by mengus
<tuonela> case 1 demek degiskenin degeri 1 mi demek
<tuonela> yoksa onceden tanImlI mI "case"
<aib> evet parantez icindeki (a) case'len ayniysa o case
cailsir
<mengus> tuonela: asagidaki if statement ile yukaridaki switch
statement birbirinin aynisi
<tuonela> e$itlik dI$Inda bir $eyi kontrol edemez miyiz
switch() le
<mengus> ayni i$i yapiyorlar
<Wish> selamlar
<mengus> tuonela: hayir
<mengus> edilemez
<tuonela> hmm
<tuonela> tamam
<mengus> ba$ka sorusu olan?
<aib> tuonela: if.. else if..else'le yaparsin esitsizligi
<Ancyreum> yok
<UnConscious> sayI dI$Inda bir$ey de olabilir degil mi o? case
mustafa gibi?
<aib> dilden dile degisiyo
<mengus> UnConscious: dilden dile degi$ir
<aib> C'de sadece integer olabiliyo
<mengus> ornegin php'de ya da visual basic'de olabilir
<UnConscious> ok
<Arbalest> peki switch'i e$itsizlik iÁin de
kullanabilir miyiz
<Wish> int var
<mengus> hayir
<Wish> void var
<mengus> switch'te sadece e$itlik test edilebilir
<aib> wish: sorulara mengu ve ben cevap veriyoruz
<SSG> delphi'de ve visual basic'te switch yerine "case"
kullanilir
<SSG> case a
<SSG> 1: hede;
<SSG> 2: hodo;
<SSG> end;
<SSG> gibi
<mengus> ba$ka sorusu olan yoksa devam ediyoruz?
<Ancyreum> tamam
*** Mode "+m" by mengus
<aib> ok.. loop'lar
<mengus> $imdi aib bize dongu kavramini, for ve while
dongulerini anlatacak
<aib> loop yani dongu, devamli tekrar edilen kod parcasi
demektir
<aib> dongunun basit bi mekanizmasi vardir
<aib> 1) (bi sey olana kadar tekrar et)
<aib> veya
<aib> 2) (sonsuza kadar tekrar et)
<aib> normalde sonsuz loop'larin icinden de bi cikma
mekanizmasi olmasina ragmen
<aib> bunlara deginmeyecegiz
<aib> bunun disinda, sonsuz loop'larin icinden cikilamaz
<aib> windows gibi isletim sistemlerinde CTRL+ALT+DEL ile
filan program kapatilir
<aib> DOS'ta da restart atilir anca
<aib> scripting diliyle yaziyosaniz interpreter'in bi "cikma"
komutu varsa o da kullanilabilir
<aib> ama bunun disinda sonsuz donguler cikilamadigindan
kullanilmamalidir
<aib> neyse, diger donguler ise nispeten rahat dongulerdir,
belirli bi olay olana kadar tekrar ederler
<aib> ornek veriyorum
<aib> bundan once "kullanicidanYaziAl()" fonksiyonunun
kullanicinin klavyeye yazdigini dondurdugunu dusunun lutfen
<aib> string sifre;
<aib> sifre = "(bo$)";
<aib> while (sifre != "asecretplace")
<aib> {
<aib> sifre = kullanicidanYaziAl();
<aib> }
<aib> simdi bunu tek tek aciklamak istiyorum
<aib> string sifre; sifre degiskenini "string" yani "yazi"
iceren bi degisken olarak tanimladik
<aib> sifre = "(bo$)"; sifre degiskenine herhangi bir deger
verdik, onemli degil
<aib> while (sifre != "asecretplace") sifre stringi
"asecretplace"e esit degilse (!=) asagidaki blogu { ... } calistir
<aib> sifre = kullanicidanYaziAl(); kullanicinin girdigi
yaziyi degiskene ata
<aib> burda blok bittiginde kod ne olursa olsun while'a
doner...
<aib> while (sifre != "asecretplace") sifre stringi
"asecretplace"e esit degilse asagidaki blogu calistir
<aib> eger kullanici bi onceki calistirmada "asecretplace"
yazmamissa, sifre ona esit olmayacagindan program sifreyi tekrar sorar
<aib> sorduktan sonra tekrar while'in basina doner... eger
hala esit degilse yine sorar
<aib> kisacasi kullanici bu yaziyi yazana kadar dongu doner
<cortez> eger bu sifre sayi ise nolucak
<aib> ben ornek olarak string kullandim ama sayi da
kullanilabilir gayet rahat
<aib> while (sifre != 666)
<aib> { sifre = kullanicidanTamsayiAl();
<aib> }
<aib> burda dikkat edilecek ilk nokta,
<aib> while() statement'i ilk goruldugunde while'in en basta
bi test yatigidir
<aib> bu test yuzunden onceden sifre = "(bo$)"; diyerek
sifrenin bi sekilde kazara bizim sifreye esit olmasini onledik
<Arbalest> ¸nlem i$areti if statement mI oluyo
<aib> while'in parantezlerinin icine giren seyler if'inkilere
girenle aynidir
< >
<aib> hatta boyle bir karsilastirma olmasi gerekli bile degil,
o parantez icindeki sey DOGRU oldugu surece loop calisir
<aib> kisaca sunlari geciim bari
<aib> == sagdaki soldakine esitse DOGRU
03/07/22 23:29:33 *** hired-spor is now known as hired-gun
<aib> != sagdaki soldakine esit degilse DOGRU
<aib> > sagdaki soldakinden buyukse DOGRU
< sagdaki soldakinden kucukse DOGRU
<mengus> yanli$ oldu
<aib> ay sag sol mu dedim
<mengus> :)
<aib> offf o kadar da bakmistim
<aib> ya ilkokul matematigi gibi
<aib> 6 > 3 dogru
< 6 yanlis
<aib> x = 3;
<mengus> ahhahah
< 6 yanlis
<mengus> aib: hanim senin uykun geldi :)
<aib> x = 100;
<aib> x > 6 dogru
<tuonela> bi $ekilde $ifre dogrulanInca ne olur
<aib> dikkat edin, sifrenin dogrulanmasi gibi bisiy yoktur
burda, kod sadece yazdigimizi yapar
<aib> sayet eger sifre degiskeni "asecretplace" olsaydi
<aib> (sifre != asecretplace) YANLIS dondureceginden
<aib> loopa bir daha girilmezdi
<aib> yani looptan cikilmis olunurdu
<tuonela> yani adam 34.denemede asecretplace yazsa?
<aib> hic fark etmez, bu dongu sifre "asecretplace"e esit
oluncaya kadar calisir
<aib> while "su su su iken" demektir ingilizcede
<aib> sunu okursak:
<aib> while (sifre != "asecretplace")
<aib> "sifre 'asecretplace'e esit OLMADIGI SURECE"
<UnConscious> hem sayI hem harf iÁeriyorsa?
<aib> degiskenin ne icerdigi ve buna nasil baktiginiz
degiskene gore degisir
<aib> mesela
<aib> while (1 == 1) { print "hede"; }
<aib> seklinde bir loop 1 her zaman 1'e esit olacagindan
DEVAMLI calisir
<aib> while (1 == 2) { print "hede"; } ise bir kere bile
ekrana hede yazmaz
<mengus> bi araya girebiir miyim
<aib> bi sn
<aib> kisaca while'i soyle acalim
<aib> parantez icindeki sey dogru ise, loopun icindekileri
yap, yapman bitince tekrar kontrol et
<aib> parantez icindeki sey dogru ise, loopun icindekileri
yap, yapman bitince tekrar kontrol et
<aib> parantez icindeki sey dogru ise, loopun icindekileri
yap, yapman bitince tekrar kontrol et
<aib> ...
<UnConscious> mesela bu ˆrnekte $ifre carismaboy17
olsaydI, en ba$ta string $ifre veya int $ifre yazamazdIk sanIrIm, ne
yazardIk bu durumda?
<aib> string yazardik "17" ayni zamanda bi string de
olabilir
<aib> sifreye de yarildim :)
<aib> mengus: buyur
<mengus> hah biraz soyledin
<mengus> ben onu tamamlayayim
<mengus> abcdef
<mengus> bir stringdir
<mengus> abcdef16
<mengus> da bir stringdir
<mengus> 16 bir int tir
<mengus> boyledir :)
<aib> ok :)
<aib> bakin soyle bisiy yapalim
<aib> 1'den 10'a kadar saydirma:
<-- i tamsayi
<-- i 1
<= 10)
<aib> {
<aib> print i;
<aib> }
<aib> simdi bakalim mantik nasi calisiyo
<aib> int i; -> i'yi bi tamsayi variable'i olarak dusun...
bazi dillerde yazmaniza gerek yok pardon ben alistigim icin otomatik
yazmisim
<aib> i = 1; -> i'ye 1 degerini koy
<= 10) -> i 10'dan kucuk veya 10'a esit ise
asagidakini yap:
<aib> print i; -> i'yi ekrana yaz
<aib> print i;'nin altina i = i + 1; koyuyoruz
<aib> i = i + 1; -> i'ye i'nin degerinin bi fazlasini koy (2)
<aib> burda basa donuyo
<= 10) -> i 10'dan kucuk veya esit ise
asagidakini yap...
<aib> 2, 10'dan kucuk veya esit oldugu icin aynen devam:
<aib> print i; -> ekrana 2 yaziyo
<aib> i = i + 1; -> i bu sefer 3 oluyo
<aib> ...
<aib> fast forward'a aliyoruz, i'nin 10 oldugunu dusunun
<= 10) -> i 10'dan kucuk veya esit oldugu icin
asagidakini yap:
<aib> print i; -> 10 yazdir
<aib> i = i + 1; -> i 11 oldu
<aib> tekrar basa
<= 10) -> bu sefer i 11 oldugundan calismiyo
<aib> ve loopa bi daha girilmiyo.. loopun altinda ne varsa o
calismaya basliyo
*** Mode "-m" by aib
<aib> soru?
<stackoverflow> abi ne dersiydi bu
<tuonela> sifre asecretplace girildiginde de bu blogun
altIndaki koddan mI devam edIyor
<mengus> tuonela: evet
<aib> tuonela: evet once while() bakiyo o ikisi esit... esit
oldugu icin loopu calistirmiyo direk atliyo
*** Mode "+m" by aib
<aib> bi ornek daha
<cortez> mengus: ok o halde
<Wish> ea
<aib> i = 5;
<mengus> aib dur
<aib> while (i == 6)
<aib> {
<mengus> wish bisey soracak
<mengus> aloovvv
<aib> print "i 6 olmus";
<aib> }
<aib> ohooo
<mengus> buyur wish
<mengus> wish bambaska alemlerde sanirim.
<mengus> devam edelim biz
<aib> ok
<aib> su ornegi tekrar veriim
<aib> i = 5;
<aib> while (i == 6)
<aib> {
<aib> print "i'nin degeri 6";
<aib> }
<aib> print "loop bitmis oh be";
<aib> boyle bi program, while'in parantezindeki hicbir zaman
dogru olmayacagindan
<aib> while'in icindeki print "i'nin degeri 6";" satirini
hicbir zaman calistirmaz
<aib> diger "loop bitmis oh be" der
<aib> sayet eger en basta i = 5; yerine i = 6; deseydik
<aib> bu sefer de program devamli i'nin degeri 6 diyip basa
doneceginden
<aib> sonsuz loopa girmis olurduk
<tuonela> loop bitmis oh be'yi bir kere yazar di mi
<aib> tabii ki, o satir loop icinde degildir
<aib> loop'u kapatan, dile ozgu DELIMITER'lar vardir
<aib> if gibi
<aib> benim yukardaki yazdigim ornekte bunlar { ve }
oldugundan sadece { ve } icerisi loopa alinir
*** Mode "-m" by aib
<aib> anlasilmayan ?
<tuonela> s¸per
<Wish> bide
<Wish> ! var
<Wish> aib
<Wish> ! expressionu anlatirmisin
<Wish> != gibi
<aib> diyince a alti ise hede calisiyodu ya
<Arbalest> ben cevaplayabilir miyim
<aib> Arbalest: tabi
<Arbalest> efenim "!" yazInca e$itdegildir demek oluyo
<arbalest> eski osmanlicada <> derdik biz buna
<mengus> Arbalest :)
<mengus> bir cok dil halen o yazimi da kabul etmektedir
<UnConscious> if nasIl delimiter oluyor onu anlamadIm
<aib> if'teki gibi
<aib> if (a == 6) { hede }
<aib> UnConscious: if delimiter degil, while'da da if'teki
gibi delimiter var
<aib> if (a == 6) { hede } gibi while (a == 6) { hede }
<UnConscious> aib: ok anladIm
<aib> { ve } arasindaki seyler looptadir sadece
<aib> gerisinin while'la alakasi olmaz
<aib> mengus: for'u geciim bitiriim mi ?
<aib> mengus: while'la ayni zaten
<tuonela> delimiter ";" dilmiydi yav
<aib> tuonela: o statement delimiter... bu block delimiter
<mengus> for'u yapalim ve bitirelim
*** Mode "+m" by aib
<aib> ok while'i anladiysaniz for cok basittir
<aib> biraz akil karistirabilir ama mantigi cok kolaydir
<aib> soyle ki
<aib> demin sayi saydirma yaptik ya
<aib> i = 1;
<= 10)
<aib> {
<aib> print "i'nin degeri:" i;
<aib> i = i + 1;
<aib> }
<aib> for bunun gibi seyleri kolaylastirmak icindir
<aib> bakin ben once bu while'i tek bi for icine aliim
<= 10; i = i + 1)
<aib> {
<aib> print "i'nin degeri:" i;
<aib> }
<aib> ne nereye geldi gorduyseniz,
<aib> for (a; b; c) formatinda bi loop'un
<aib> a;
<aib> while (b) {
<aib> ...
<aib> c;
<aib> }
<aib> seklinde acildigini gorursunuz
<aib> yani a loop'tan once yapilan seydir
<aib> b while'in test ettigi seydir
<aib> c'de loop'tan sonra yapilir
<aib> burda dikkat edilmesi gerek nokta a'nin bir kere
yapildigidir
<aib> cumle haline getiriim:
<aib> for(bunu bi kere yap; bu dogru oldugu surece loopu
islet; loop bitiminde bunu yap)
<Arbalest> sondaki i=i+1 de antik ÁaglarIn next'i oluyor
degil mi
<aib> evet ama burdaki fark
<aib> "antik caglardaki" for'larin, daha dogrusu
for...next'lerin variable'in degerini birer birer arttirmasidir
<aib> biz burda i = i + 2; hatta i = i * 3; de diyebilirdik
<mengus> "i nin degerini sifira esitle, i nin degeri
10dan kucuk oldugu surece i 'yi bir artirarak dongu icindeki kodu calistir'
< 10; i = i + 1)
<tuonela> for da yapip while da yapilamayan veya tersi
bir ˆrnek var mI
<aib> hayir, for while'lar icin bi kolayliktir
<UnConscious> next nasIl kullanIlIr o hale
<aib> for'u bu sekilde olan dillerde next yoktur
<aib> next olan dillerde for ayridir
<SSG> tamam icecek ve sosisli servisi ba$lasin
<mengus> ssg hakkaten ne g¸zel dedin sen
<mengus> midem yaniyor
*** Mode "-m" by aib
<tuonela> abiler , for her dafasInda () arasInda 2. ;.....;
yere mi bakIyor
<Arbalest> benimki tur$usuz olsun l¸tfen
<aib> tuonela: aynen oyle while icine o giriyo gibi dusun
<SSG> tuonela: 2. yer dongunun devam etme ko$ulunu kontrol
eden statement
<SSG> expression diyelim veya
<tuonela> sanki her defasInda i=0 yapacak gibi geliyor ;)
<mengus> for(baslangicta yapilacak hareket; kontrol edilecek
ko$ul; loop edince yapilacak hareket)
<tuonela> tamamdIr tamam
<SSG> 1. 'si for ilk ba$larken cali$an 3.'su de her
iterasyonda cali$acak olan kod
<SSG> mesela ekrana 1'den ona kadar sayilar yazdiran for
<detay> afiyet olsun :)
<mengus> sizler sagolun :)
<Arbalest> evet elinize saglIk
<SSG> for(n=1;n<=10;n=n+1) printf("%d ",n);
<Arbalest> uzun boylu arkada$larIn beline de
03/07/22 23:58:15 * UnConscious hocalar˝n˝n ellerinden tek tek ˆper,
te˛ekk¸rlerini sunar.
<tuonela> ziya: hadi canIm ;)
<kofteburger_> t¸rkiye sizinle guru duyuyor
<SSG> ahah ders bitti hala bagiriyorum
<SSG> arkada$laaar fooooorrrrr
<mengus> ahhahahaha
<tuonela> eheheh
<tuonela> ssg koptu yaziyo
<SSG> fooor donguleeeriiiiiiii
<Ancyreum> cok saolun arkadaslar
<UnConscious> ehehe
<down> tesekkurler
<kofteburger_> susun hoca bi$i diyo
<orqan> ellerinize saglik arkadaslar
<SSG> allah belanizi versin
<mengus> ahhaha
<SSG> egeeheh
<UnConscious> hoca ÁIkmadan ders bitmi$ sayIlmaz!
<PrymeSinistaJinx> SSG: for kafalarIna kafalarIna da
sussunlar.
* SSG rastgele tebe$ir atar
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment