Geçen hafta algoritma ve akış diagramını anlatmıştık. Size bununla ilgili de ödev vermiştik değil mi gençler? Hepiniz de sağ olun yapmışsınız ödevinizi. Sizlere daha önceki bu ödevden bir önceki ödevde de vermiş olduğumuz ödevdeki bir soru da programlama dillerinin kronolojik gelişimsel sıralamasını çıkartıp bunların bize karşılaştırmasını yapmanızdı. Dolayısıyla Şu an sonundaki konuya aslında birçok arkadaşımız aşina olmalı.
Biliyorsunuz bilgisayarların gelişimsel sürecinde hemen programlama dilleriyle başlamıyoruz arkadaşlar. Bilgisayarları kullanmaya veya bilgisayar gibi bilgisayara benzer hesaplamalı sistemleri. İlk önce kullanılan teknikler sıfır ve birlerli bilgisayarları donanımsal düzeyde kullanmak, program yapmak veya problemlerimizi çözmek. Ama bu çok zorlu bir süreç.
Çünkü... O kadar çok fazla sayıda 0 ve 1 var ki veya işte 0 veya 1 mantığına denk gelen delikli kartlar var. Oradaki herhangi bir 0 veya 1 değerinde hata yapmak zaten olası.
Bu mümkün bir şey. Herhangi bir 0, 1, 1, 1'i de 0 olarak sisteme tanımlamak olası bir şey. Ve bunu bu şekilde de programlamak gerçekten çok zorlu bir süreç.
Dolayısıyla hataya da açık bir sistem olduğu için. bilim adamları bunu daha efektif bir sistem haline getirebilmek için acaba ne yapabiliriz sorusunun cevabını aramaya başlıyorlar. Ve bu sıfır ve birlerle olan programlama mantığını insana daha yakın, insanın daha hatayı azaltacak biçimde kullanabileceği şeklinde teknikler geliştirmeye başlıyorlar. İşte nedir bundan sonraki süreç?
SM'li dili. SM'li dilinde de aslında hala donanıma çok yakınız. Şimdi sıfır ve birlerle programlama yaparken tabii ki doğrudan donanıma müdahale ediyoruz.
SML dilinde de aslında aynı şeyi yapıyoruz. SML dilini kullanan bir kişinin donanımı iyi bilmesi gerekiyor. Oldukça iyi bir düzeyde bilmesi gerekiyor.
Kaydedicileri bilmesi gerekiyor. Bellek adresleriyle nasıl çalışacağını bilmesi gerekiyor. Portları bilmesi gerekiyor.
Kesmeleri bilmesi gerekiyor. Efendim, segment bölgelerini bilmesi gerekiyor. İşte data segment, efendim, counter register'ı. Bunun gibi instruction pointer veya bunun daha ilkel düzeydeki karşılıklarını çok iyi bilmesi gerekiyor ki programımı yapabilmesi için. Dolayısıyla bu da zorlu bir süreç ama kabul etmek gerekir ki 0-1'lerle uğraşmaktansa SM'li dilinde faaliyet göstermek daha uygun oluyor.
Ama hala gerçekten çok zorlu bir süreç. Çünkü az önce dediğim gibi hala donanımı çok iyi bilmeniz gerekiyor. Dolayısıyla...
Yüksek seviyeli programlama dillerine ihtiyaç var. Bunlar düşük seviyeli programlama dilleri. Çünkü donanıma çok yakın.
Yüksek seviyeli programlama dillerinde de biz ne yapıyoruz? Problemi nasıl çözdüğümüzü aslında dilsel ifadelerle bilgisayara anlatıyoruz. Şundan şunu topla, şundan çıkart, kullanıcıdan şunu iste, bunu şu fonksiyona gönder, oradan gelen cevabı şuraya yaz gibi.
Bu şekilde biliyorsunuz yüksek programlama dillerinde kullanıcıyla sanki bilgisayarımız daha birebir etkileşim halinde. Ama şimdi burada bir şey var. uzmanlık seviyelerinde farklılaşma var.
Daha ilk versiyonlarında programlama tekniklerinin ilk versiyonunda kullanıcı donanıma çok hakimdi. Ki bence bugün bile hala böyle olmak gerekiyor. Yani birer bilgisayar mühendisi olarak bizim bilgisayar konusundaki donanımsal bilgi seviyemizi tecrübemizi iyi hale getirmemiz gerekiyor. Fakat günümüzdeki bilgisayar programıma araçları maalesef bunu bizden uzaklaştırıyor doğrusunu söylemek gerekirse.
Neden? Çünkü biz hiç bilgisayarda işte mesela şu kadar basit bir şeyde bile işte ekranın herhangi bir yerine arzu ettiğiniz bir yerine A karakterini basmak için bilgisayarın donanımsal düzeyde neler gerçekleştirdiğini bilmiyoruz. Doğrusunu söylemek gerekirse.
Sadece yaptığımız şey A karakterini yaz. Bilgisayara bunu söylemek. Bu tabii ki program olarak çok hızlı Teknolojinin çok hızlı kullanılabilmesini sağlıyor. Birçok bizim için kolaylaştırıcı yönleri var ama dediğim gibi donanım tarafını düşündüğümüz zaman maalesef ondan çok uzağız. Tek bir A karakterinin ekrana basılabilmesi için gerekli arka planda gerçekleştirilen 15-20 belki daha da fazla arda arda gerçekleştirmesi gereken rutinin ne olduğuyla ilgili hiçbir bilgimiz yok.
Onun için benim size tavsiyem evet programlama güzel, programlama becerilerinizi artırın ancak... diğer taraftan bilgisayarla ilgili, bilgisayar donanımıyla ilgili bilgi seviyenimizi de artırmanız sizin için faydalı olacaktır. Üst sınıflarınızda dersleriniz var. İşte mikro işlemciler dersi olsun, gömülü dersler olsun, lojik dersi olsun.
Bununla ilgili sizin bilgi seviyenizi tabii ki artırmaya çalışıyoruz. Ama yeter mi? Yetmez. Çünkü bu derslerde dahi az önce sorduğum sorunun cevabını çok bulamayabilirsiniz. Onun için kişisel olarak gençler bence sizin yapmanız gereken şey donanımdan da çok fazla uzaklaşmayın.
İşte program... Yazdığımız esnada geri planda nelerin gerçekleştiği ile ilgili arkadaşlar kafanızda da soru işaretleri olmalı. Ve bunlarla ilgili kendinizin de araştırma yapmanızda fayda var.
Gelelim biz niçin C programlama dilini kullanıyoruz senelerdir sizleri ilk görmeniz gereken ders olarak. Çünkü arkadaşlar C programlama dili şu an dünyadaki bizim alanımızda en fazla kullanılan dillerden bir tanesi. Ve bu hemen olan bir şey değil.
Yani. Çok güncel bir şey değil. 10-20 yıldır, 30 yıldır bu böyle. Halen C programlama dilinin modası geçmemiştir.
Halen de güncelliğini korumaktadır. Sektörde de çok fazla bir şekilde kullanılmaktadır. Ayrıca diğer dilleri de temel teşkil eden bir dil. Çünkü C dilini eğer kullanım olarak biliyorsak diğer programlama dillerinde de çok aşina bir şekilde.
Çünkü aynı kökenden, aynı aileden gelen diller var. Onlara... Rahatlıkla geçiş yapıp orada da faaliyet gösterebilirsiniz.
C programlama dili arkadaşlar ayrıca kullanılan işletim sisteminden bağımsız bir dil. Yani şunu söylemeye çalışıyorum. Çoklu platform desteği olan bir dil.
Yani hem Windows işletim sisteminde çalışabilen, hem Linux veya Unix var işletim sistemlerde çalışan, Android işletim sisteminde, iOS işletim sisteminde çalışan, her yerde, her türlü gömülü sistemde, çalıştırabileceğiniz birçok farklı donanımı destekleyen bir programlama dildir. Bu açıdan da birçok dile göre daha avantajlı bir programlama dildir C programlama dili. Ayrıca C'nin donanıma diğer programlama dillerine göre çok daha alt düzeyde yakın olduğunu söyleyebiliriz.
Şundan bahsediyorum. Diğer programlama dillerinde de SM'li yazabilirsiniz gençler. Ama C'nin bu konuda destekleri çok daha fazladır.
Bunun bir nedeni de... Gençler, C'nin hem kendi geliştiricileri tarafından sunulan kütüphane dediğimiz kod kaynakları oldukça geniş ve zengindir. Ve aynı zamanda C dilini kullanan kişiler tarafından da yazılmış, geliştirilmiş kod kaynakları mevcuttur. Bunlarla ilgili birçok farklı donanımsal düzeyde görev gerçekleştirilebilir. Diyelim ki...
Herhangi bir şeye ihtiyacınız var ve bu C tarafından doğrudan desteklenmiyor. Doğrudan desteklenmiyor derken C'nin geliştiricileri böyle bir kütüphane yazmamış ama emin olun muhakkak suretle veya muhakkak suretle demeyelim ama çok çok büyük bir ihtimalle sizin ihtiyacınız olan şey geliştiriciler tarafından da gençler yani başka kullanıcılar tarafından da kütüphaneleştirilmiştir. Ve internet gibi veya başka kaynaklarda bu tür kütüphaneler... sunulmuştur.
Bunlara erişebilmemiz mümkündür. Dolayısıyla herhangi bir iş gerçekleştirirken ihtiyaç duyacağımız birçok kaynakta çevremizde var C programı modeliyle alakalı. Arkadaşlar C programı modelini dolayısıyla gençler iyi öğrenirsek eğer bu konuda uzmanlığımızı arttırabilirsek bu kendimize yapabileceğimiz en büyük yardımlardan biri olmuş olacak. Çünkü neden? Dediğim gibi sektörde çok fazla kullanılıyor.
diğer program modellerine geçişiniz veya onlardaki yapıyı anlayabilmek olabildiğince zahmetsiz hale geliyor. Bunun için benim size kişisel tavsiyem C program modellini dersimiz için öğrendiğiniz gibi kendinize yatırım olarak da düşünüp önemsemeniz, çok çok iyi öğrenmeniz sizin çok faydanıza olacaktır. Peki devam edelim. Peki program...
Nasıl çalışılabilir bir kod haline getiriliyor? Bunu incelediğimizde ilk önce biliyorsunuz ki bizim çözeceğimiz problemi mantıksal ve kurgusal olarak kendi bir kere içimizde çözmemiz gerekiyor. Zihnimizde çözmemiz gerekiyor. Bunun da yolu bunun problemin nasıl çözüleceğinin algoritmasını ya da akış diagramını ortaya koymak. İlk önce algoritmasını ve akış diagramını ortaya koymuş olduğumuz problemin daha sonra kodlanması gerekiyor.
Bu kodlamayı gerçekleştirdiğimiz zaman arkadaşlar derleyici bunun yazım kurallarına göre kontrolünü yapıyor. Yalnız mantıksal... değerlendirme süreci maalesef değerleyici tarafında yok. Mantıksal doğru olup olmadığını bizim arkadaşlar yine kontrol etmemiz gerekiyor. Yani acaba yazdığımız algoritmanın gerçekten karşılığı yazdığımız kod mu?
Ya da yazmış olduğumuz kodda ortaya dökmüş olduğumuz teknikler az önce geliştirmiş olduğumuz algoritmanın aynısı mı? Veya ona onu andıran bir modeli mi? Bunu mantıksal bir süzgeçten geçirmeniz gerekiyor.
Neden? Çünkü tekrar ediyorum. Derleyiciniz yani kodunuzu obje dosyası haline getirecek derleyici programınızdaki size yazım hatalarını söyleyebilir.
Yani diyebilir ki işte siz burada noktalı virgül unutmuşsunuz, parantez unutmuşsunuz. Ben böyle bir komut görmedim. Yani printf yazacağınız yere print yazmışsınızdır.
Ben bu kodu bilmiyorum. Yani böyle bir fonksiyon bende tanımlı değil gibi yazıma yönelik hatalar size söyleyebilir. Ancak mantıksal bir hatanın olup olmadığını size derleyici söylemez. Yani üçle beşi toplayacaksınızdır siz algoritmanıza göre ama üçten beşi çıkartmışsınızdır ve programınız çalışır.
Bu çalışmaması ile ilgili hiçbir sorun yoktur. Ha üçle beşi toplamışsınız ha üçten beşi çıkartmışsınız. Derleyici açısından bunun ikisi de doğrudur.
Ama acaba mantıksal olarak bunun hangisi doğru cevabını verecek kişi sizsiniz. Onun için ki yazım kontrolünü tabii ki derleyici yapıyor ama mantıksal süzgeçten geçirecek olan biziz. Onun için programlarınızı çok iyi kontrol etmemiz gerekiyor. Diyelim ki mantıksal süzgeçten geçirdik yazmış olduğumuz kodu herhangi bir sıkıntı gözükmüyor. Yazım kontrolünden de derleyici tarafından geçirildi ve herhangi bir hata dönmedi ki derleyici herhangi bir hata yazım hatası olmayana dek bize hata üretecektir.
Hata olmadığı zaman artık yazmış olduğumuz kod derleyici tarafından obje dosyası haline getirilir. Obje dosyası arkadaşlar çalışılabilir bir dosya değildir. Obje dosyası yazmış olduğunuz kodun tabii ki makine dili kod karşılığı olduğu söylenebilir. Fakat bu sizin yazmış olduğunuz kodun tam olarak makine diline çevrilebilmesi için arkadaşlar kullanmış olduğunuz fonksiyonların da kütüphanelerdeki sizin kullanmış olduğunuz fonksiyonların da bu obje dosyasının içerisine enjekte edilmesi, birleştirilmesi gerekir. Bunu şöyle açıklayayım.
Kod yazıyorsunuz, diyorsunuz ki işte ekrana Erciyes Üniversitesi yaz. Ama ekrana Erciyes Üniversitesi'nin yazılmasını sağlayan fonksiyon başka bir kütüphanede. Ama o kütüphanede sadece ekrana yazılmasını sağlayan kod parçası yok.
O kütüphane içerisinde bunun gibi belki onlarca, belki yüzlerce başka fonksiyon daha var. Ama siz o fonksiyonları kullanmadınız. O fonksiyonların tamamını kullanmadınız. Neyi kullandınız? Sadece örneğin ekrana yazma fonksiyonunu kullandınız.
Dolayısıyla... O kütüphane içerisindeki tüm fonksiyonların değil de sadece sizin kullanmış olduğunuz fonksiyonların veya onunla ilintil olan fonksiyonların alınıp sizin kodunuza entegre edilmesi gerekir. Yoksa tüm kütüphane eğer sizin obje dosyanıza eklenip ondan sonra çalışılabilir dosya ortaya çıkartılacak olsaydı bu kodunuzun fazla şişmesi manasına gelirdi.
Gereksiz yere abartılması manasına gelirdi. Artık kodların devreye girmesi gerekirdi. Oysa dediğim gibi ne yapıyoruz biz?
Kütüphanedeki sadece bizim kullanmış olduğumuz fonksiyonlar alınıyor, seçiliyor, ayıklanıyor ve bizim obje dosyamıza eklendikten sonra ortaya çalışılabilir dosya çıkartılmış oluyor. Bu sadece C programlama diline yönelik bir şey değil. Tüm derleme tabanlı çalışan programlama dillerinin usulü bu şekildedir. Yani algoritmayı çıkartırız, kodumuzu oluştururuz. Mantıksal olarak bizim tarafımızdan yazım kuralları olarak değerleyici tarafından gözden geçirilir.
Hata yoksa obje dosyası ortaya çıkar. Obje dosyasının içerisine kütüphanedeki bizim kullanmış olduğumuz kodların karşılıkları tümleştirilir. Obje dosyasına ve ortaya çalışılabilir bir dosya çıkmış olur. İşte C programı adının avantajı burada çalışan bir kod, kaynak kod.
İşte Windows işletim sisteminde yazdık diyelim. Linux işletim sisteminde de çalışacaktır. Ne bileyim cep telefonunuzda dahi çalışacaktır. Herhangi bir gömülü sisteminde de çalışacaktır. Çünkü dediğim gibi çoklu platform özelliğine sahip bir programıma dilidir.
C programıma dili. Burada az önceki slide'da anlattığımız şeyin grafiksel olarak gösterimi var. Programı yazıyoruz.
Tabi programı yazmadan önce dediğim gibi algoritma sınıfı ve akış diagramını ya fiziksel olarak ya da zihnen oluşturmuş olmanız gerekiyor. Bunun sonrasında programı yazdıktan sonra Hata uyarısı almayana kadar arkadaşlar yazım kontrolünden geçirerek ön işlemciye gönderiyoruz derleyici. Herhangi bir hata varsa bize tabii ki uyarıyor ve hata olmayana dek bu süreci tekrar tekrar tekrar devam ettiriyoruz.
Ne zamanki hatamız yok derleyicimiz kaynak kodumuzdan obje dosyasını üretmiş oluyor. Obje dosyasına da linker vasıtasıyla birleştirici vasıtasıyla kütüphanelerdeki bizim kullandığımız kod parçacıkları enjekte ediliyor, birleştiriliyor ve ortaya çalışılabilir egze uzantılı dosyamız çıkmış oluyor arkadaşlar. Bu slide'ımız bu kadar. Hemen diğer sunumuza geçelim. Pardon sanırım ikinci sunuyu paylaşacağım.
Evet şimdi burada size fonksiyonel programlama dili olarak C programlama dilinin yapısından bir miktar bahsedeceğiz ilk önce genel kavramlarda. Daha sonra dikkat etmemiz gereken bazı yazım kuralları var. Bazı notasyonel kurallar var, noktalama kurallar var.
Bunlardan bahsedeceğiz. Az önce derleme olayını anlatırken biraz bahsettiğimiz kütüphane kavramını biraz daha detaylandıracağız burada. C diline özgü sözcükler var.
Biz bunları değişken isimlendirmesinde kullanamıyoruz. Niçin kullanamadığımızı anlatacağız ve bunlar neler olduğundan bahsedeceğiz arkadaşlar. Sabitlerden ve değişkenlerden bahsedeceğiz ve C programında herhangi bir...
değişken kullandığımız zaman onun veri tipini daha öncesinde tanımlamış olmamız gerekiyor. Bunu niçin yapıyoruz ve ne tür veri tiplerimiz var? Bunlardan bahsederek bu slide'ı da tamamlamış olacağız. Dedik ki geçen hafta size parçala fethet mantığını güdüyoruz program yazarken.
Problemimizi en küçük yapı taşlarına bölüyoruz ve bu en küçük yapı taşlarına da hakim olmamız gerekiyor. Ve bu en küçük yapı taşlarıyla da birbirleri arasındaki bağlantıları bağlamamız gerekiyor. ortaya çıkartmamız gerekiyor. Buna işte dediğimiz gibi biz fonksiyonel programlama veya parçala fethetme mantığı diyoruz.
C program modelinin yapısı da arkadaşlar fonksiyonel bir program modelidir. Yani probleminizi küçük yapı taşlarına bölersiniz. Bunları fonksiyonel hale getirirsiniz ve birbirleriyle bağlantılarını ortaya çıkartırsınız. Birbirleriyle bağladığımız zaman da ortaya büyük resim yani programımızın kendisi çıkmış olacak. Ve az önce dediğimiz gibi programlarımız biz fonksiyon fonksiyon fonksiyon yazıyoruz.
Yani her bir küçük problemi fonksiyonlaştırıyoruz ve programımızda birçok fonksiyon veya prosedür yer alıyor. Ama bir C programında olmazsa olmaz en az bir tane fonksiyon zaten vardır arkadaşlar. En az bir fonksiyon vardır herhangi bir C programında. Bu da esas fonksiyonumuz yani main fonksiyonumuzdur.
Fonksiyonların biraz da yapısal özelliklerinden bahsedelim. Arkadaşlar fonksiyonlarımızın ilk satırı fonksiyonumuzun başlık satırı dediğimiz ifadedir. Fonksiyonumuzun başlık satırı. Fonksiyonumuzun başlık satırında ilk gözümüze çarpan şey fonksiyonumuzun adıdır. Fonksiyonumuzun isminin ne olduğudur.
Örneğin şu an sunudaki slide'mızdaki fonksiyonumuz programımızın esasını, ana çatısını teşkil eden main fonksiyonu. Demek ki fonksiyonumuzun ismini biz burada görebiliyoruz. Başlık satırında.
Diğer bir gördüğümüz bilgi fonksiyonumuzun şu an parametresiz olduğu. Birazdan bunları detaylandıracağım. Şu an fonksiyonumuzun parametresiz olduğunu görüyoruz. Çünkü argüman listesinde void yazıyor.
Eğer fonksiyonumuz parametreli bir fonksiyon olsaydı argüman listesinde void haricinde veri tiplerini görmemiz gerekiyordu. int gibi, double gibi, float gibi. Birazdan bunları yine detaylandıracağım. Bir diğer hususta başlık satırımızda fonksiyonumuzun değer döndürüp döndürmediğini görüyoruz.
Örneğin burada int yazıyor. Eğer burada int yerine void yazıyor olsaydı fonksiyonumuzun değer döndürmeyen bir fonksiyon olduğunu anlayacaktık. Halbuki burada tam sayının karşılığı olan int yazıyor. Her zaman int yazmak zorunda değil. int, double, char, float gibi veri tipi bilgisi yazabilir.
Bu durumda veri tipi yazıyorsa eğer değer döndüren bir fonksiyon olduğunu anlıyoruz. Eğer veri tipi yazmıyor void yazıyorsa da parametresiz bir fonksiyon olduğunu anlıyoruz. Dolayısıyla.
Şimdi hemen o zaman fonksiyon türlerimize bakalım. Fonksiyonlarımızı arkadaşlar az önce anlattığımdan yola çıkarak şöyle sınıflandırdığımızı sizler de anlamışsınızdır. Fonksiyonlarımızı parametreli fonksiyonlar ya da parametresiz fonksiyonlar olarak sınıflandırabiliriz.
Parametreli fonksiyonlar, parametresiz fonksiyonlar ya da değer döndüren ve değer döndürmeyen olarak da yine ek iki tane daha fonksiyon sınıfında buna ekleyebiliriz. Dolayısıyla tekrar edecek olursak parametreli fonksiyonlar, parametresiz fonksiyonlar, değer döndüren fonksiyonlar, değer döndürmeyen fonksiyonlar ve bunları çaprazladığımız zaman ortaya 4 tane farklı bakın fonksiyon tipi ortaya çıkacak. Bunları yani parametreli parametresiz, değer döndüren, döndürmeyen şeklinde bunları çaprazladığımızda bakın 4 tane fonksiyon tipi ortaya çıkıyor.
Nasıl? Şöyle parametreli değer döndürmeyen fonksiyonlar, parametreli Değer döndüren fonksiyonlar, parametresiz değer döndürmeyen fonksiyonlar, parametresiz değer döndüren fonksiyonlar şeklinde 4 farklı sınıftan bahsedebiliriz. Tekrar ediyorum, parametreli değer döndürmeyen, parametreli değer döndüren, parametresiz değer döndürmeyen, parametresiz değer döndüren şeklinde 4 farklı fonksiyon sınıfı gerçekleyebiliriz arkadaşlar C programı modelinde. Peki bir fonksiyonun Parametresiz olduğunu nereden anlarız?
Fonksiyonumuzun başlık satırından. Bir fonksiyonumuzun parametresiz olduğunu fonksiyonumuzun başlık satırından nereden anlıyoruz arkadaşlar? Argüman listesinde void yazıyorsa eğer, fonksiyonumuzun argüman listesinde void yazıyorsa eğer, bu fonksiyonumuz parametresiz bir fonksiyondur. Parametresi bulunmayan kullanıcı tarafından veya diğer fonksiyonlar tarafından buraya herhangi bir giriş verisi gönderilemeyecek.
bir fonksiyon olduğunu buradan anlayabiliriz. Dışarıdan herhangi bir veri girişi yoktur bu fonksiyona. Parametresiz bir fonksiyon. Halbuki parametreli fonksiyonda ise giriş parametreleri veya parametresi veya parametreleri vardır. Bunu nereden anlıyoruz?
Parametreli olan fonksiyonlarda argüman listesinde void yazmaz giriş parametresi veya parametrelerinin veri tipleri yazar. int, double, char, float gibi. Bunu görürüz.
Peki bir fonksiyonun değer döndüren olup olmadığını başlık satırından nasıl anlarız? Eğer bir fonksiyon değer döndürmeyen bir fonksiyonsa, yani dışarıya herhangi bir yapılan işlemin sonucuyla ilgili bilgi vermeyen, değer döndürmeyen bir fonksiyonsa, şu an burada sizin int olarak gördüğünüz yerde void yazar. Yani burada void yazması demek, değer döndürmeyen bir fonksiyon olduğu manasına gelir. Ama void değil de, Bir veri tipi ifadesi varsa int, double, float, char veya başkaları daha bir sürü veri tipimiz var.
Bunlardan herhangi birisi yazıyorsa fonksiyonumuzun isminin hemen önünde. O zaman bu fonksiyonun değer döndüren bir fonksiyon olduğunu anlarız. Peki şimdi o zaman bu anlattıklarımızdan yola çıkarak eğer şu an tahtadaki veya daha doğrusu sunudaki main fonksiyonu değer döndüren bir fonksiyon olsaydı. Fonksiyon başlığında ne yazardı?
Düzeltiyorum. Parametreli bir fonksiyon olsaydı, tam sayı parametresi olan, tam sayı giriş parametresi olan bir fonksiyon olsaydı, başlık satırında ne yazardı? Kimler söylemek ister?
Hocam void yazan yerde int mi yazardı? İşte bana başlığın tamamını söyleyin. Değer döndüren, değer döndüren parametreli bir fonksiyon olsaydı ne yazardı?
int main it. Evet güzel. Parametre giriş argümanı...
giriş parametresi eğer tam sayı olacak olsaydı bu fonksiyonumuzun parametresiz değil de parametreli bir fonksiyon ve tam sayı parametresi olan bir fonksiyon olsaydı arkadaşımızın da söylediği gibi int main int yazacaktı. Peki bu fonksiyon şu an gördüğümüz kadarıyla parametresiz bir fonksiyon. Aynı zamanda değer döndürmeyen bir fonksiyon olsaydı hem parametresiz hem de değer döndürmeyen bir fonksiyon olsaydı bu fonksiyon başlığımızın nasıl yazılması gerekirdi Evet yazması gerekir Peki değer döndürmeye değer döndürme kaldırılması lazım Efendim program konuların altındaki rütbeli kaldırılmış olması lazım daha gelmedik henüz şimdi fonksiyon başlığındayız tamam Şimdi eğer değer döndürmeyen değer döndürmeyen Tam sayı parametreli bir fonksiyon olsaydı ne yazardı gençler?
Değer döndürmeyen tam sayı parametreli bir fonksiyon olsaydı. Tekrar edelim. Sesiniz çok az geliyor. Evet.
Void main int yazardı. Güzel. Hangisini sormadık ya? int main int bunu gördük. Tahtadaki void karşımızda.
void main void de gördük. void main int'i de gördük. Tamam hepsini o zaman sizlere veya yöneltmiş veya üzerinden geçmiş olduk değil mi arkadaşlar?
Eğer dört farklı main fonksiyonu yazacak olsaydık hani parametreli parametresiz değer döndüren döndürmeyen şeklinde buradaki void veya int'in nasıl değişeceğini anlamış olduk. Ve dediğimiz gibi gençler o zaman toparlayacak olursak demek ki fonksiyonlarımızın ilk satırları fonksiyonumuzun başlığı olmuş oluyor. Fonksiyonlarımızın ilk satırları fonksiyonumuzun başlığı oluyor.
Bu fonksiyon başlığından biz neleri anlıyoruz? Fonksiyonumuzun ismi nedir? Onu görüyoruz.
Fonksiyonumuz değer döndüren, değer döndürmeyen parametreli, parametresiz bunu anlamış oluyoruz. Peki, şimdi arkadaşlar o zaman fonksiyonumuzun gövdesini isterseniz ele alalım. Fonksiyonumuzun gövdesi de gençler hemen fonksiyonumuzun başlığından sonra gelir.
Ayraç açarız ve ayraç kapatarak gövdemizi oluşturmuş oluruz. Yani ayraçımızı açıyoruz. Ayraçımızı açtıktan sonra bu fonksiyona ait komutlarımızı yazıyoruz.
Ve bu gövdeyi bitirmek sonlandırmak için de tekrar ayraçımızı kapatıyoruz. Peki az önce arkadaşımız dedi ki hocam orada bir de return deyimi var. Return deyimi arkadaşlar buradaki return deyimi. değer döndüren fonksiyonlarda olan ifadedir. Değer döndürülmesini sağlayan ifadedir.
Fonksiyonlar konusu geldiğinde bu return'ün fonksiyonumuzun ismiyle olan alakasını size anlatacağım. Ama şu an için çok erken. Dolayısıyla burada şunu bilmenizde fayda var. Değer döndüren fonksiyonlarda return deyimi olur. Ve bu değer döndürülmesini sağlayan fonksiyondur.
Değer döndürülmeyen fonksiyonlarda ise yani şurada int yazan yerde void yazıyorsa eğer, değer döndürmeyen fonksiyonlarda ise return deyimi kullanılmaz. Tamam mı gençler? Demek ki değer döndüren fonksiyonlarda program gövdesinin içerisinde return deyimini ararız olmalıdır. Bunun haricinde bir de tabii ki fonksiyon gövdesinin içerisinde program komutları olur.
Peki şimdi isterseniz madem fonksiyonumuzun başlığını ele aldık, fonksiyon gövdesini ele aldık. Acaba az önce... işte değer döndüren döndürmeyen parametreli parametresiz gibi sınıflandırdığımız fonksiyonlar üzerine birazcık daha detaylı konuşalım şimdi.
Gençler acaba sinüs fonksiyonu ne tür bir fonksiyondur? Parametreli mi parametresiz mi? Parametreli.
Parametreli mi parametresiz midir? İyi düşünelim. Bence her ikisi.
Evet. Dolayısıyla sinüs fonksiyonu arkadaşlar parametreli bir fonksiyon mudur? Parametresiz bir fonksiyon mudur? Parametre durdu. Evet parametre durdu.
Neden? Çünkü sinüsün işlev yapabilmesi için size onu söylemeniz lazım. Ona bir şey söylemeniz lazım.
Ona bir veri göndermeniz lazım. Ne verisi gönderiyorsunuz? Diyorsunuz ki 30 derecenin sinüsünü hesapla. Dolayısıyla sadece sinüs dediğiniz zaman yani sinüs diyecektir ki tamam da ne yapayım ben şu an benim işlem yapabilmem için bana bir şey söylemen lazım. Yani hangi açının sinüsünü hesaplamam lazım gibi sizden bir veri girişi alması gerekiyor.
Dolayısıyla Bu fonksiyonun görevini icra edebilmesi için dışarıdan bir veri girişi yapılması gerekiyorsa eğer, bu tür fonksiyonlara biz ne tür fonksiyonlar diyoruz arkadaşlar? Parametreli fonksiyonlar diyoruz. Peki, mesela şöyle bir fonksiyon olsaydı, bunun ne tür bir fonksiyon olduğu konusunda yine bana yardımcı olmanızı istiyorum.
Ekranı temizle. Yani ekrandaki tüm karakterleri temizle. Bu parametreli bir fonksiyon mudur, parametresi bir fonksiyon mudur?
Parametresi. Parametresiz. Parametresiz.
Parametresiz. Peki parametresiz neden? Çünkü bu fonksiyonun görevini icra edebilmesi için benim ona herhangi bir ek parametre beslememe gerek yok.
Öyle değil mi arkadaşlar? Neden? Ekranı tamamen temizle dedim.
Yani başka işte başka herhangi bir veri girişine ihtiyacı yok. Peki eğer şöyle bir şey olsaydı. Ekranı söyleyeceğim renge boya. Kırmızı.
Parametre. Parametrel. Neden? Çünkü ekranı söyleyeceğim renge boya kırmızı dediğim zaman kırmızı renge boyayacak. Ekranı söyleyeceğim renge boya mavi dediğim zaman da mavi renge boyayacak.
Dolayısıyla herhalde parametreli fonksiyonlar anlaşıldı. Görevini icra edebilmesi için ek bir değer girişi veya girişlerine ihtiyacı varsa... Arkadaşlar fonksiyonumuz bu fonksiyonun parametreli olduğunu söylüyoruz.
Peki şimdi sinüs fonksiyonuna geri dönelim. Sinüs fonksiyonu değer döndüren bir fonksiyon mudur? Değer döndürmeyen bir fonksiyon mudur?
Değer döndüren. Değer döndüren. Neden?
Çünkü bir iş yapıyor ve bu işin sonucunu bize söylüyor. Yani sinüs 30 dediğimiz zaman o bize 1 bölü 2 cevabını veriyor. Halbuki herhangi bir cevap vermeyecek olsaydı bu fonksiyonumuzun değer döndürmeyen bir fonksiyon olduğunu düşünürdük. O zaman ekrandaki tüm karakterleri temizle fonksiyonunun çok büyük bir olasılıkla ne tür bir fonksiyon olduğunu söylerdik. Parametresiz bir fonksiyon olduğu haricinde.
Değer döndürür mü? Ekrandaki tüm karakterleri temizle. Değer döndürmez. Evet, değer döndürmesine gerek yok.
Şüphesiz değer döndüren şekilde yazabiliriz. Örneğin. Bu fonksiyon değer döndüren şekilde yazılır.
Mesela nasıl? Ekrandaki tüm karakterleri temizle. Şimdi bu fonksiyon bize 1 veya 0 değeri döndürebilir.
1, ekrandaki tüm karakterleri temizleyebildiğini gösterebilir. Veya 0, ekrandaki tüm karakterleri bir hata nedeniyle temizleyemediğini de ifade edebilir. Ama yalın bir bakış açısıyla, yani sade bir bakış açısıyla, ekrandaki tüm karakterleri temizle dediğimiz zaman, şimdi bu fonksiyon çok büyük bir ihtimal, değer döndürmeyendir diye hepimizin düşünmüş olması gerekir. Tamam mı gençler? Anlatabildim mi?
Neden? Çünkü ancak biz eğer bu fonksiyonu gerçekten hani ya neyse bu fonksiyon aslında değer döndürmeyen bir fonksiyon olur ama neyse biz bunu bir de değer döndüren halinde yazalım dediğimiz zaman zorlama bir süreçle belki de değer döndüren şeklinde ifade edilen bir program veya daha doğrusu fonksiyon halinde yazılabilecek bir fonksiyon. Peki başka değer döndürmeyen bir fonksiyon ne olabilir?
Bir tuşa basılana kadar bekle. Bir tuşa basılana kadar bekle fonksiyonu. Parametrelidir hocam. Çünkü bir tuşun girmesini bekleyeceğiz. Peki o tuşu kullanıyor mu?
Bir tuşa basılana kadar bekle. İçeride kullanıyor mu? O tuştan gelen değeri kullanmayacak mı hocam? Yok yani kullanıyorsa parametrel olması gerekir.
Kullanmıyorsa... Kullanmıyorsa parametresiz. Evet kullanmıyorsa parametresiz değil mi arkadaşlar?
Kullanmıyorsa parametresiz, kullanıyorsa parametre olarak yazılabilir. Peki bir tuşa basılana kadar bekle fonksiyonu. Değer döndüren bir fonksiyon mudur?
Değer döndürmeyen bir fonksiyon mudur? Değer döndürmez. Peki ne zaman değer döndüren olur?
Tuşa basıldığınızda. Bekle işleminden sonra herhangi bir işlem yapıyorsa. Yok birazcık daha şöyle daha şey düşünün.
Ne zaman? Biraz daha teknik düşünelim. Şimdi normalde bizim. bir tuşa basılana kadar bekle fonksiyonunun biz parametresiz olabileceğini düşünüyoruz.
Yani çünkü herhangi bir yani bir şu an ek bir görev yüklemedik biz bu fonksiyonu. Bir tuşa basılana kadar bekle. Peki nasıl olur da acaba hangi mantık güdüldüğü zaman bu fonksiyon aslında değer döndüren bir fonksiyon olarak da yazılabilir. Hocam bir tuşa basıldığı andan sonra o parametreye döndüğü zaman Değeri bekleyip değeri aldıktan sonrasında ekran sonrasında yazdırırsa girdiğimiz değeri.
O zaman ben biraz da soruyu sade halde anlatayım. Bir tuşa basılana kadar bekle fonksiyonunu az önce tartıştık. Bu parametreli de olabilir, parametresi de olabilir.
Giriş parametresi eğer parametreli bir fonksiyonsa basılan tuş örneğin bunun giriş parametresi olarak Düşünülebilir dedik. Peki acaba döndürdüğü parametrede basılan tuş olamaz mı? Öyle değil mi? Şimdi bir tuşa basılana kadar bekle. Kullanıcının tıkladığı tuş da aslında olabilir.
Değil mi döndürdüğü parametre? Hem giriş parametresi olarak kullanılabilir. Çünkü giriş parametresini alıyor.
Tekrar onun da giriş parametresini de tekrardan... sistemimizde programımızda geri dönüş parametresi olarak da kullanıyor olabilir. Neyse anladığım kadarıyla herhalde şu an parametresiz değer döndüren döndürmeyen fonksiyon konuları az çok anlaşıldı gibi. Doğru mu?
Tamam değil mi gençler? Peki. Şimdi o zaman bununla ilgili bir simülasyon yapalım. Abdülvahap orada mısın?
Buradayım hocam. Tamam Abdülvahap. Şimdi ben main fonksiyonum tamam mı? Programın temelini teşkil eden, ana çatısını teşkil eden main fonksiyon benim. Sen de kombinasyon fonksiyonusun.
Sen de kombinasyon görevi göreceksin. Ve her fonksiyon tek bir görev görür. Yani mantıken her fonksiyonun tek bir aslında görev görmesi gerekir. Birden fazla fonksiyon icra etmemesi gerekir.
Peki bize bir tane de faktürel fonksiyonu lazım. Kim faktürel fonksiyonu olmak ister? Hocam Fatih.
Fatih. Fatih de faktürel fonksiyonumuz. Tamam.
Peki şimdi programımızın içerisinde ben varım. Abdülvahap var. Fatih var.
Benim görevim kullanıcıyla iletişime geçmek. Abdülvahap'ın görevi... Kombinasyon hesabı yapmak.
Fatih'in hesabı da faktörel hesabı yapmak. Bakın nasıl çalışıyor sistem. Şimdi ben main function'ım açıldım. Ondan sonra dedim ki kullanıcıya kaçın kaçlı kombinasyonunu hesaplamak istiyorsunuz?
Kullanıcıya sordum bunu. Kaçın kaçlı kombinasyonunu hesaplamak istiyorsunuz? Kullanıcı giriş yaptı.
Dedi ki 7'nin 3'lü kombinasyonunu hesapla. Tamam. 7'nin 3'lü kombinasyonu ama bunu hesaplayacak kişi ben değilim. Veya o fonksiyon ben değilim.
Hemen Abdülvahap dedim ki, Abdülvahap bana 7'nin 3'lü kombinasyonunu hesapla cevap gönder. Abdülvahap dolayısıyla 7'nin 3'lü kombinasyonunu yapacak bir alt fonksiyon. Peki Abdülvahap sen ne yapacaksın şimdi? Hocam ben o fonksiyonu dediğim gibi yazacağım. Daha doğrusu...
Fonksiyon tamam. Ama senin kombinasyon hesabı yapabilmen için 7 faktörüyle ihtiyacın var. 3 faktörüyle ihtiyacın var. 4 faktörüyle ihtiyacın var.
Ne yapacaksın? Ben faktöriyelden dönüt bekleyeceğim. Evet Fatih'e soracaksın.
Diyeceksin ki Fatih'e Fatih diyeceksin bana 7 faktöriyelin cevabını söyle. Çünkü sen faktöriyel hesabı yapmaktan sorumlu fonksiyon değilsin. Faktöriyel hesabı yapmaktan sorumlu olan fonksiyon kim? Fatih.
Evet Fatih sana 7 faktöriyelin cevabını sordu kombinasyon. Ne yapacaksın? Ben ona dönüt olarak 7 faktöriyelin cevabını söyleyeceğim. Evet 7 faktöriyelin cevabını söyledin. Şimdi ne yapacaksın?
Abdülvahap ne yapacaksın şu an? Hocam ben de kendi işlemlerimi yapıp size tekrardan... Bir saniye sen sadece 7 faktör ile öğrendin daha. Dur. Başka?
İşte hocam tekrardan ondan 3-4 faktör ile... 3 faktör ile isteyeceksin. Fatih tekrar sen neyin cevabını vereceksin?
3 faktör ile cevabını ona göndereceğim. Şimdi ne isteyeceksin Abdülvahap? 4. 4 faktör ile öğrendim.
Fatih sen ne yapacaksın? 4 faktör ile cevabını ona göndereceğim. Şu an Fatih görevini tamamladı. Fatih aslında 3 defa görevini tamamladı. 3 de birbirinden farklı şeyler.
Çünkü 3 defa 7 faktor ile istedik cevabını aldık. 3 faktor ile istedik cevabını aldık. 4 faktor ile istedik cevabını aldık.
Şu an Abdülvahap hesap yapabilmesi için tüm gerekli verilere sahip. Ne yapacak? Yapacak ki 7 faktoriyel bölü 3 faktoriyel çarpı 4 faktoriyel.
Yani n faktoriyel bölü n-r faktoriyel çarpı r faktoriyel hesabını yapacak. Yaptın mı Abdülvahap? Yaptın. Tamam.
Dolayısıyla 7'nin 3'lü kombinasyonun değerini biliyorsun. Şimdi ne yapacaksın? Hocam ben de kendi işlemlerimi yapıp size tekrardan döndüreceğim.
Bana söyleyeceksin. Neden? Çünkü ben senden sordum, sen bana karşı cevap vermek zorundasın.
Sen kimden sordun? Fatih'ten sordun, Fatih sana cevap vermek zorunda. Bakın ben hiçbir şekilde Fatih'le iletişime geçmedim.
Çünkü main function kombinasyona sordu, kombinasyon faktörüyle sordu. Ben Fatih'ten faktörünün cevabını almış olsaydım kombinasyonun nasıl hesaplandığını bilmiyorum. Kombinasyonun nasıl hesaplandığını bilsem faktöreli bilmiyorum. Faktöreli bilsem kombinasyonu bilmiyorum.
Çünkü her fonksiyon işlev olarak tek bir işlev yerine getirmeli. Mantığımızın bu olması lazım. İşte biz buna fonksiyonel programlama diyoruz.
Dolayısıyla artık ben neyin cevabını biliyorum? Kombinasyonun nasıl hesaplandığını bilmiyorum. Faktöreli nasıl hesaplandığını bilmiyorum. Ama neyi biliyorum? 7'nin 3'lü kombinasyonun cevabını biliyorum.
Şimdi ben ne yapacağım? Sizde kullanıcıya gönderdi. Evet ben de kullanıcıya söyleyeceğim. Tamam.
İşte buradaki program komutları dediğimiz şeyler bunlar. Kullanıcıdan aldım. Gönderdim. İşte alt fonksiyonlar bana gönderdiler. Ve şu an kullanıcıya söyledim.
Ve hangi satırdayım şu an? Return 0 satırındayım. Return 0 satırı da fonksiyonun değer döndürülmesini sağlıyor.
Peki. Şimdi. Abdülvahap'ın. kombinasyonla ilgili kodlarındaki return deyimi programın içerisinde kalan değer döndürme veya Fatih'in faktürel kodların içerisindeki return deyimi onlarda değer döndüren fonksiyon olduğu için onlarda da değer döndüren fonksiyonlar oldukları için onlarda da return deyimleri var ama bu return deyimleri program içerisinde kalan return deyimleri fakat main fonksiyon içerisindeki return deyimi Onlardan bir miktar daha farklı.
Veya onlar bana... Benden giriş parametresi değeri alabiliyorlar veya kendi aralarında haberleşebiliyorlar. Ama main parametreli bir main ise yine onlardan bir miktar daha farklı. Nüans farkı var aralarında. Dolayısıyla main fonksiyon diğer alt fonksiyonlardan bir miktar daha özel.
Şöyle anlatmaya çalışayım. Kombinasyonu ben çağırdım main fonksiyon. Faktör eli ise kombinasyon çağırdı.
Peki beni kim çağırdı arkadaşlar? Main fonksiyonun özelliği bu. Main fonksiyonunu kim çağırır? Kullanıcı. Kullanıcı mı yoksa başka bir ortam mı?
Yaz alıncı hocam. Anlayıcı mı? Programı yazan kişi çağırmaz mı hocam? Kütüphane mi çağırır hocam?
İşletim sistemi çağırır arkadaşlar. Main fonksiyonu diğer fonksiyonlardan ayıran bir özellik de onun doğrudan kimle irtibata geçebilmesidir? İşletim sistemine.
Yani evet biz tıklıyoruz veya biz ismini yazıp çağırıyoruz ama esasen main fonksiyonu çalıştıran onu çağıran kimdir? İşletim sistemidir. Tamam mı?
Tamam mı gençler? Ona parametre gönderilecekse de giriş parametresi gönderilecekse de kim gönderir onu? İşletim sistemi gönderir.
Dolayısıyla bir fonksiyon şunu söylemeye çalışıyorum. Bir fonksiyon kendisini kim çağırdıysa ona geri dönüş yapar. Parametreli veya parametresiz. değer döndüremeyen veya değer döndürmeyen şeklinde.
Tamam mı arkadaşlar? Burası anlaşıldı mı? Tekrar ediyorum.
Bir fonksiyon kendini kim çağırmış ise ona değer veya değer döndürmeyerek oraya geri dönüş yapar. O halde main fonksiyon işletim sistemi çağırdı. Main fonksiyon işletim sistemi çağırdı.
Main fonksiyon kime geri dönüş yapacak? Program tamamlandığında return sıfır dediğimiz zaman kime geri dönüş yapacağız? İşletim sistemine.
İşletim sistemine, güzel. Diğer fonksiyonlar program içerisindeki fonksiyonlara geri dönüş yaparken main fonksiyon hem işletim sistemi tarafından çağrılır hem de işletim sistemine geri döner. Peki, madem işletim sistemine geri dönüş yapıyor main fonksiyon, onun en alt satırında genellikle return 0 yazar. Bu return 0 işletim sistemi açısından neye acaba denk geliyor olabilir?
Return 0. Main fonksiyon tabanındaki return 0. 0 yazmak zorunda değil. Return herhangi bir değer. İşletim sistemi açısından neye karşılık, neye tekabül ediyor acaba?
İşlemin yapılma sayısının acaba? İşlemin olması gerektiği gibi tamamlandığına karşılık geliyor. Return 0. Yani işletim sistemine main fonksiyondan 0 değerinin dönmesi demek arkadaşlar tamam program görevlerini... Tamamladı. Her şey olması gerektiği gibi ben de sana sıfır hata olmayan bir kod gönderiyorum demek olduğu söylenebilir.
Peki örneğin return eksi bir. Mesela örnek veriyorum. Return sıfır değil de return eksi bir olsaydı ne diyebilirdik?
Mesela örnek veriyorum. Belki de return eksi birin mantığı yani eksi bir değerinin dönmesi işletim sistemine yazıcıda kağıdın olmadığını bize söylüyor. Anlatabiliyor muyum arkadaşlar? Normalde return sıfır olsaydı anlayacaktık ki yazım işlemi tamamlandı, kağıt vardı, kağıt sıkışmadı, yazım tamamlandı, return sıfır.
Yani şu an yazma işlemi tamam ama return eksi bir, eksi bir değeri geldiği zaman yazıda kağıt yok. Return eksi iki, kağıt sıkıştı. Ya da diyelim ki main fonksiyon bir tarayıcıyla ilgili işleve sahip olan yani internet tarayıcısıyla ilgili görevi olan bir fonksiyon, bir program.
404 hatasını döndürdü bize. Return 0 değil de return 404 mesela. Ne olmuş olabilir bu durumda? Hatırlıyor musunuz 404'ün ne olduğunu?
Sayfa bulunamadı. Belki de dediğim gibi yazmış olduğumuz main fonksiyon internet tarayıcısı işlevi gören bir web sayfasına giden onu arayan belki de bir fonksiyon bir program. 404 hata değerini döndürdüğü zaman anlıyoruz ki aradığımız sayfa ne yapılamamış? Bulunamamış.
Tamam mı gençler? Demek ki toparlayacak olursak fonksiyonumuzun başlığı fonksiyonumuzun gövdesi, değer döndüren döndürmeyen parametreli parametresiz fonksiyonlar olduğunu söyledik. Fonksiyonumuzun gövdesinin ayraç açıp kapatılarak işte oluşturulacağını söyledik.
Bu ayraç içerisinde programımızın komutları olacak ve değer döndüren fonksiyonlarda ayrıca biz return deyimini aradığımızı Söyledik. Tamam mı gençler? Tamam mıyız şu an? Tamam.
Return'den bahsettik. Main fonksiyonundaki return'un diğer alt fonksiyonlardaki return'den bir miktar daha nüans farkı olduğundan bahsettik gençler. Bu da bizim ilk örneğimiz. İlk örneğimiz ekrana herhangi bir şey yazma.
Yani merhaba dünya tabii ki bu artık klasik bir örnek olduğu için. Merhaba dünya yazmak zorunda değiliz ama adımızı yazabiliriz, söylediğimizi yazabiliriz, başka bir şey yazabiliriz. Ekrana çıktığı vereceğiz yani veya Erciyes Üniversitesi yazarız.
Ekrana eğer herhangi bir programın dilinde... bir şey yazabilecek kadar bir şey yazıp işte yapıp değerleyebiliyorsak tamam biz o programın önünde artık bunun gerisini getirebiliriz diye düşünebiliriz Çünkü bu ilk adım ilk adım çok önemli bunu yaptıktan sonra gerisi gelir diye mantıken düşünüyoruz Arkadaşlar şimdi sizlerle ilk örneğimizi yazacağız buradaki inkluse tede ayı satır arkadaşlar bizim Şuradaki printf fonksiyonu kullanabilmemiz için gerekli kütüphane std.io nokta haş Standart giriş çıkış kütüphanesi yani std.io. Standart input output header dosyası. Burada C programı geliştiricileri tarafında konsoldan yapılabilecek girişler ve konsola yapılacak çıkışlar amacıyla geliştirilmiş olan fonksiyonları içeren kütüphane dosyamız bu std.io. Bunu printf komutunu kullanabilmek için veya printf fonksiyonunu kullanabilmek için çağırıyoruz, include ediyoruz std.io kütüphane dosyasını.
Daha sonra... İşte fonksiyonumuzun başlığı. Fonksiyonun başlığımızdan anladık ki bu parametresiz değer döndüren bir main fonksiyonu. Hemen gövdemizi oluşturduk. Ayracımızı açtık.
Kodlarımızı yazdık. Printf merhaba dünya noktalı virgül. Her komutusunda noktalı virgül olacaktır. Daha sonra da return 0 noktalı virgül ve ayracımızı kapattık.
Bunu yapıp çalıştırdığımız zaman merhaba dünya yazısı ekrana çıkacak. Şimdi bunu yapabilmek için ben ide olarak yani tümleşik geliştirme ortamı olarak DFC++'ı kullanıyorum. Neden? Son derece sade, anlaşılır, kolay, çok fazla böyle karıştırılabilecek bir yeri yok. Yazıyorsunuz, değerliyorsunuz, olay bitiyor.
Ama sizler DFC++ kullanabileceğiniz gibi kullanmak zorunda da değilsiniz. Mesela buna yönelik CodeBlocks var. CodeBlocks kullanılabiliyor.
Bildiğim kadarıyla CodeBlocks farklı işletim sistemlerinde de kullanılabilen bir IDE. Onu da kullanabilirsiniz. Hatta DFC++'a göre doğrusunu söylemek gerekirse birazcık daha renkli, sıcak bir arayüzü var. Ama ben DFC++ tercih ediyorum dediğim gibi. Alışkanlık belki de.
Ama yine de DFC++ veya CodeBlocks'da kullanmak zorunda değilsiniz. İşte Visual Studio var. Visual Studio Code var. Sanırım Mac platformunda Xcode olsa gerek var. Bunların hepsinde C kodu yazıp değerleyebiliyorsunuz gençler.
Ben size şimdi chat ekranından DFC++'ı indirebileceğiniz adresi yazacağım. Orwell Edition'ını kullanıyorum ben. Orwell sürümünü kullanıyorum. DFC++'ı bu adresten indirebilirsiniz arkadaşlar.
sohbet penceresine ekledim. CodeBlocks'u da bu adresten indirebiliyorsunuz. Hangisini isterseniz illa bu ikisini de kullanmak zorunda değilsiniz.
Dediğim gibi Visual Studio kullanabilirsiniz. Code kullanabilirsiniz. Xcode kullanabilirsiniz veya başkalarını da kullanabilirsiniz. Şimdi dersimize şöyle bir saatimiz kaç bakayım.
20 geçiyor, geçiyor. 35 geçiye kadar ara verelim. Sizler bu süre zarfında hangisini kullanacaksanız veya hepsini de indirebilirsiniz.
İnternetten indirin. Dev C++'ı, CodeBlocks'ı veya artık hangisini istiyorsanız. Tabii ki Visual Studio'yu falan 15 dakikada indirip kurmak mümkün değil.
Veya varsa bile kurmak da bu süre zarfında mümkün olmaz. Dolayısıyla bugünlük herhangi birisini indirin arkadaşlar. İlk programımızı yazacağız. hep beraber yazacağız ve derleyeceğiz.
35 geçe herkes burada olsun ve idesi hazır olsun. Tamam. Kod yazacağımız programı hazır olsun.
Anlaştık mı? Tamam. Tamam hocam.
Tamam. 35 geçe buluşuyoruz.