Input ve Pratikler

Bu zamana kadar birçok şey öğrendik ama hiç interaktif (etkileşimli) kod yazmadık yani kullanıcıyla etkileşime girmedik. Günlük hayatta kullandığınız siteleri, uygulamaları düşünün. Birçoğu sizden bir bilgi, yorum veya mesaj girmenizi ister. İşte bunun adı tam olarak 'input'tur yani kullanıcıdan girdi almaktır. Şimdi biz, bu blog yazısında bunun mantığını öğreneceğiz.

Öncelikle, GoLang'de kullanıcıdan veri istemek şu şekilde oluyor: '&degiskenismi'. Hemen görelim.

Yukarıdaki kodu lütfen uygulayın. Şimdi, ilk kırmızı kutuya baktığımızda bir değişken atadığımızı görüyoruz ama bu değişkenin herhangi bir değeri yok. Sadece string olduğu bilgisini veriyoruz; bu elbette int veya float da olabilir.

Ondan sonra ikinci kırmızı kutuya baktığımızda 'fmt' modülü içerisinde bulunan 'Scanln' fonksiyonunu kullandığımızı görüyoruz. Bu fonksiyon, kullanıcıdan istediğimiz verileri almamıza yardımcı olur. Fonksiyonun içerisine çoğu zaman olduğu gibi değişken ismini yazıyoruz ama çok ufak bir fark var: '&'. İsteyeceğimiz değişkenin en sol tarafına yani başına '&' işaretini ekliyoruz (SHIFT + 6).

Çıktı kısmına bakalım. Kodumuzu 'go run practicesGo.go' ile çalıştırıyoruz ve değişik bir şeyle karşılaşıyoruz; bilgisayar donmuş gibi geliyor ama aslında biz, kullanıcıdan 'name' değişkenimizi '&name' komutu ile cevaplamasını istiyoruz. Oraya bir isim girmeniz veya 'CTRL + C' ile kapatmanız yeterli olur. Bu kodu biraz daha güzelleştirelim çünkü kullanıcı böyle bir ekran ile karşılaşırsa yüksek olasılıkla ne olduğunu anlamayacak ve orayı terk edecek.

Normal şartlarda kodumuzu güzelleştirirken yani kullanıcının anlayacağı şekle sokarken yukarıda, kırmızı kutu ile işaretlediğim kodu yazıyorduk. Fakat kullanıcıdan girdi alırken aynı şeyi yapabilecek miyiz? Hemen bakalım.

Yukarıda, kırmızı kutu içerisine aldığım komuta bakın; az önceki gibi kodumuz güzelleştirmeye çalıştım ama çıktı kısmında da gördüğünüz gibi hiçbir şey olmadı. Hatta bu sefer bir şeyler girmemi bile beklemeden programı sonlandırdı. Bu ne demek oluyor? Demek ki biz, kodumuzu güzelleştireceğimiz zaman 'Scanln' fonksiyonunu kullanamıyoruz. Bu fonksiyon içerisine sadece ve sadece kullanıcıdan istediğimiz verilerin değişkenlerini yazıyoruz.

Peki, bu durumda nasıl bir yol izleyebiliriz? Elbette 'Println()' kullanmayı düşünebiliriz. Hemen görelim:

Şimdi kullanıcı, gerçekten de adını girmesini istediğimizi anlayacak duruma geldi. 'Adınız: ' şeklinde soru sormuş olduk ve 'Scanln' ile cevap beklemeye başladık. Ancak burada estetik bir saçmalık var. Kullanıcıya adını soruyoruz ama adını, bir alt satıra girmesini istiyoruz. Yani;

Adınız:

...

Şeklinde bir görüntü mevcut. İşte, tam burada 'Print()' fonksiyonu devreye giriyor. Hatırlayın; print fonksiyonları arasındaki farkı anlatırken 'Println()' fonksiyonunun bir satır daha eklediğini söylemiştik. 'Print()' fonksiyonu ise hiç yeni bir satır yaratmadan bir sonraki veriyi direkt olarak yanından başlatıyordu. Şimdi, 'Println()' yerine 'Print()' kullanmayı deneyelim.

Evet, şimdi daha düzgün bir görünüm ile karşılaştık. 'Print()' fonksiyonunu küçümsemememiz gerektiğini, yeri geldiğinde kullanacağımızı söylemiştim; yeri geldi. 

Şimdi, biz kullanıcıdan ismini girmesini istiyoruz ama ismini girdiğinde program hemen sonlanıyor çünkü başka kod yok. O zaman kullanıcı ismini girdikten sonra ona 'hoş geldin' demeye çalışalım.

Kodlarımızı görüyorsunuz. İlk adımda değeri olmayan bir değişken tanımladık çünkü o değeri kullanıcıdan alacağız. İkinci adımda 'Print()' ile kullanıcıya ismini 'Adınız:' şeklinde sorduk. Üçüncü adımda 'Scanln(&name)' şeklinde kullanıcıdan girdi bekledik. Son adımda ise 'Println()' ile her zaman yaptığımız gibi kodumuzu güzelleştirdik ve çıktıda da gördüğünüz gibi 'Hoş geldin CyberWorm' yazdırdık.

Burada dikkatli olmanız gereken ince bir nokta var. En başta, değişken tanımlarken değişkenin önüne herhangi bir simge veya işaret eklemedik; her zamanki gibi sade bir değişken ismi belirledik ve yazdık. 'Scanln()' kısmında ise değişkenin önüne '&' işareti ekledik. En aşağıda, 'Println()' kısmına geldiğimizde ise yine değişkene herhangi bir sembol eklemedik; sade bir şekilde yazdık. Bu da demek oluyor ki: "'&' işareti yalnızca Scanln() ile birlikte kullanılıyor."

Şimdi, hem bu konuyu hem de önceki konuları pekiştirmek adına çok ufak bir uygulama yapalım. Bu uygulamada, kullanıcıdan ismini, ikinci ismini (varsa) ve soyismini isteyeceğiz. Devam etmeden önce bu kodu siz yazmaya çalışın ama unutmayın; her insanın iki ismi olacak diye bir şey söz konusu değil.

Hepinizin bildiği gibi ilk önce değişken tanımlamamız gerekiyor. Tanımladık, devam edelim.

Değişkenleri tanımladıktan sonra ilk değişkenimizi az önceki gibi kullanıcıdan istedik. 

Şimdi, kullanıcıya ikinci ismini sorduk; evet ama ya ikinci bir ismi yoksa ne olacak? Program burada tıkanıyor. Hemen görelim (bir sürü yoldan sadece birini gösteriyorum).

Elbette 'if' kullanabiliriz, öyle değil mi? 'fmt.Print("İkinci adınız (Eğer yoksa 'yok' yazın.):")' şeklinde, kullanıcıyı uyardık. Daha sonra kullanıcıdan bunu, 'Scanln' ile istedik. En sonunda 'if' ile bu durumu kontrol ettik.

Şimdi, kullanıcıdan veri girmesini bekliyoruz. Oraya gerçekten ikinci ismini de yazabilir veya 'yok' da yazabilir. Bunun için sadece 'yok' yazma ihtimalini göz önüne alarak bunu kontrol ediyoruz. 'yok' kelimesinden başka bir kelime yazarsa bu kod, o kelimeyi kullanıcının soyismi olarak kabul edecektir.

Kullanıcı, 'yok' şeklinde yazmak zorunda değil; hem büyük harflerle yazabilir, hem de sadece ilk harfini büyük yapabilir. Bu 'if' koşulunda biz, bunu da kontrol ediyoruz. '||' sembolünü yani 'veya' şartını ekleyerek ihtimalleri yazıyoruz.

Daha sonra 'second_name = ""' şeklinde bir kod yazıyoruz. Bu kodun anlamı tam olarak şudur: "Eğer second_name 'yok', 'Yok' veya 'YOK' olarak girilirse second_name değişkenini boş olarak kabul et."

Normalde ikinci ismi 'Yakup' olan biri bu programı kullanırken second_name = "Yakup" şeklinde gerçekleşir. İşte, ikinci ismi olmayan biri için de biz, second_name = "" şeklinde bir kullanım yaptık.

Son olarak yukarıda da gördüğünüz gibi kullanıcıdan soyismini girmesini istedik. Şimdi, yeşil kutuya odaklanalım. Bu sefer 'Printf()' kullandık ve bu fonksiyonun ne işe yaradığını anlatmıştık. Daha düzenli, düzgün bir kullanım yaptık. Şimdi, bu kodu test edelim.

Çıktıya bakalım. Adımızı soruyor, 'Cyber' şeklinde yazdık. Daha sonra ikinci isim olarak 'Worm' yazdık; sorun çıkarmadı. Son olarak soyismimizi 'Cyberworm' olarak yazdık. Çıktının son satırına baktığımızda 'Adınız: Cyber Worm, Soyadınız: Cyberworm' şeklinde gözüküyor. Gördüğünüz gibi isim kısmı için hem ilk ismi hem de ikinci ismi almış. Gayet başarılı bir şekilde çalıştığını görüyoruz. Şimdi, ikinci isim kısmına 'yok' yazalım.

Gördüğünüz gibi ikinci isim yerine 'YOK' yazdık. Çıktı kısmına baktığımızda normalde 'Adınız: Cyber YOK, Soyadınız: Worm' tarzında bir şeyle karşılaşmamız gerekiyordu ama biz 'if' ile Go'ya şunu demiştik: "Eğer second_name değişkeninin değeri 'yok', 'Yok' veya 'YOK' ise second_name değerini boş olarak al (second_name = "")." Bunu yaptığımız için çıktı kısmında direkt olarak 'Adınız: Cyber, Soyadınız: Worm' çıktısı ile karşılaşıyoruz.

İşte, 'if' yapıları bizim için bu kadar önemlidir. Elbette, bu örnek çok basit bir örnekti; sadece anlamanız için ve pratik olması bakımından yaptım. Bir sonraki blog yazısında basit bir proje yapacağız. 


Yayınlanma Tarihi: 2022-07-26 18:41:10

Son Düzenleme Tarihi: 2022-07-29 00:08:18