GoLang ve Mantık

Bu zamana kadar öğrendiğimiz konularla alakalı bir test yaptık. Şimdi, daha da detaya gireceğiz. Aklınız karışabilir; hiç sorun değil, tekrar tekrar okuyun ve pratik yapın. Yine de, en yalın hâli ile anlatmaya çalışacağım.

Bu konu, GoLang’de ve bütün programlama dillerinde var olan konudur. Hemen geçelim.

Burada, çeşitli mantık operatörlerimiz bulunuyor. Bunlar, bazı şeyleri karşılaştırmamıza olanak tanıyor ve bu karşılaştırma sonucunda kalan işlemleri gerçekleştirmemize yardımcı oluyor. Birkaç cümle kurarak bunu daha da açayım:

>>> “Eğer x, y değerinden küçükse z işlemini yap”

>>> “Eğer x ve y birbirine eşitse hiçbir şey yapma”

>>> “Eğer x ‘doğru’ ise bunu ‘yanlış’a çevir ve z işlemini yap“

Gerçek hayattan da örnekler verelim:

>>> “Yumurta varsa bir koli al”

>>> “X çikolatasından al. Eğer X yoksa Y çikolatasını al”

>>> “Kırmızı çantanın içi boş ise onu bana getir”

Bu cümleleri biz çok rahat bir şekilde kurabiliyoruz ve karşımızdakine anlatabiliyoruz. İşimiz, bu cümleleri ve benzerlerini bilgisayara anlatmaktır. Bunun için bazı semboller geliştirilmiştir. Bunları toplu bir şekilde görelim, ondan sonra örneklere başlayacağız.

'==' Bu işaret, iki değerin eşit olup olmadığını sorgular. Bu işareti kullanırken kullanacağımız kelime ‘eşitse’dir. Koşulumuz ‘eğer eşitse’ sonuç verir. Örneğin;

>>> “Eğer x, y’ye eşitse bunları topla”

'!=' Bu, ‘’eşit değilse” koşulunun işaretidir. Burada yine iki değerin eşit olup olmadığını sorar ama koşulumuz ‘eğer eşit değilse’ sonuç verir. Örneğin;

>>> “Eğer x, y‘ye eşit değilse bunları çıkar”

'!' Ünlem işareti, önüne geldiği değeri tersine dönüştürür ve İngilizce’deki ‘NOT’ kelimesini ifade eder. Örnek vermek gerekirse false değerimiz false şeklindedir ama!false değerimiz true şeklindedir. ‘Not false’ demek, ‘yanlış değil’ demek yani 'doğru' demektir. ‘Not ture’ demek ise, ‘doğru değil’ demek yani 'yanlış' demektir ve bu ikisini !false ve!trueşeklinde gösterebiliriz.

>>> “Eğer yanlış değilse (!false) x ve y’yi topla” şeklinde bir cümleyle örneklendirebiliriz.

'<' Bu, matematikten bildiğiniz ‘küçüktür’ işareti. Aynı mantıkla gidecek olursak kuracağımız cümle şöyle olabilir:

>>> “x, y’den küçükse x’i ekrana yazdır.”

'>' Bu da, ‘büyüktür’ işareti. Cümlemiz şöyle olabilir:

>>> “x, y’den büyükse y’yi ekrana yazdır.”

'<=' Matematikteki ‘küçük eşit’ kavramı bu sembolle gösteriliyor. ‘Küçüktür’ dediğimiz zaman, değerin kesinlikle küçük olmasını bekleriz ama ‘küçük eşit’ dediğimiz zaman değerin, ya küçük ya da eşit olduğunu anlarız.

>>> “Eğer x, y’den küçük veya y’ye eşitse bu ikisini topla.” şeklinde bir cümle kurabiliriz.

'>=' ‘Büyük eşit’ sembolüdür. Mantık, yukarıdaki ile tamamen aynı. ‘Büyüktür’ dediğimiz zaman, değerin kesinlikle büyük olmasını bekleriz ama ‘büyük eşit dediğimiz zaman değerin, ya büyük ya da eşit olduğunu anlarız.

>>> “Eğer x, y’den büyük veya y’ye eşitse bu ikisini çıkar.” şeklinde bir cümle kurabiliriz.

'&&' Bu sembol, ‘ve’ anlamını taşır. Bir koşul ifadesinde iki koşulu birbirine bağlar. Bunu kullandığınızda iki koşulun da gerçekleşmiş olması zorunludur. Örneğin;

>>> “x, y’den küçük ve x, z’den büyükse hepsini topla.” şeklinde bir cümle kurabiliriz. Bu cümlede sadece eğer x, y’den küçük değilse yani ilk koşul sağlanmazsa işlem gerçekleşmeyecektir. Aynı şekilde x, z’den büyük değilse yani ikinci koşul sağlanmazsa işlem gerçekleşmeyecektir. İki koşulun da gerçekleşmesi gerekiyor. Bu sembolü klavyenizden ‘SHIFT + 6’ kombinasyonu ile elde edebilirsiniz.

'||' Bu sembol, 'veya' anlamına gelir. Bir koşul ifadesinde iki koşulu birbirine bağlar. Bu koşul ifadesinde, iki koşuldan birinin gerçekleşmesi yeterlidir.

>>> "x, y'den küçük veya x, z'den büyükse hepsini topla." cümlesini ele alalım.

Bu cümlede, bir koşulun gerçekleşmesi yeterlidir. Bir koşul gerçekleşirse bütün komut çalışacaktır. Bu sembolü şu şekilde elde edebilirsiniz:

Hatırlarsanız veri tiplerini anlatırken 'bool' veri tipini gereksiz görmemeniz gerektiğini, aslında çok işlevsel olduğunu ve bunu ileriki zamanlarda göreceğimizi söylemiştim. İşte, bu operatörlerin hepsi arka tarafta ‘true’ yani ‘doğru/evet’ veya ‘false’ yani ‘yanlış/hayır’ şeklinde döndürülür. Bilgisayar, bunu böyle anlıyor. Şimdi biz de daha iyi anlayacağız.

Şimdi, dilerseniz bütün bunları pratikte görelim.

Yukarıdaki koda dikkat edin. İlk 'fmt.' kodumuzda '1 == 2' şeklinde bir şey yazmışız. Bunun anlamı; "1, 2'ye eşit mi?" şeklindedir. Şimdi, çıktıya bakın; en üstteki değer 'false'. Bu ne demek oluyor? Biz, Go'ya "1, 2'ye eşit mi?" şeklinde bir soru sorduk. Kendisi de bize 'false' dedi yani 'yanlış/hayır' şeklinde cevap verdi. Evet, gerçekten de 1, 2'ye eşit değildir, değil mi?

İkinci satırda bu sefer Go'ya, '1 != 2' komutu ile "1, 2'ye eşit değil, değil mi?" diye bir soru sorduk. Kendisi de çıktının ikinci satırında bize, 'true' yani 'doğru/evet' şeklinde bir cevap verdi. Gerçekten de 1, 2'ye eşit değildir.

Hemen üçüncü satıra bakalım. Go'ya, '1 < 2' komutu ile "1, 2'den küçük mü?" diye bir soru yöneltmişiz. Kendisi de bize, 'true' yani 'doğru/evet' şeklinde bir cevap vermiş.

Son satıra baktığımızda da aynı mantıkla iş yaptığımızı görüyoruz. Go'ya, '1 > 2' komutu ile "1, 2'den büyük mü?" diye soru sorduk; kendisi de bize 'hayır' yani 'false' dedi.

İşte, sistem bu şekilde çalışıyor. Hemen diğer koşullarımıza da bakalım. 

Yukarıdaki koda dikkat edin. İlk satırda Go'ya, '1 <= 2' komutu ile "1, 2'den küçük mü veya 1, 2'ye eşit mi?" şeklinde bir soru sormuşuz. Kendisi de bize çekinmeden 'true' değerini veriyor. Bakın; 1 rakamı, 2 rakamından küçük; doğrudur ama 1 rakamı 2 rakamına eşit değildir. Kurduğum cümleye dikkat edin; 'veya' bağlacını kullandım. Yani bir koşulun gerçekleşmesi, 'true' değer döndürülmesi için yeterli oldu. Türkçe düşünelim:

Biz: "1 rakamı, 2 rakamından küçük mü veya 1 rakamı 2 rakamına eşit mi?"

GoLang: "1 rakamı 2 rakamından küçük ama 1 rakamı 2 rakamına eşit değil. Olsun, bir koşulu sağlamışsın; o zaman cevabım 'true'."

İkinci satıra baktığımızda yine sorumuz: "1 rakamı 2 rakamından büyük mü veya 1 rakamı 2 rakamına eşit mi?". Go bize, 'false' değerini döndürdü. 1 rakamı 2 rakamından büyük değildir aynı zamanda 1 rakamı 2 rakamına eşit de değildir. Yani iki koşulun ikisi de sağlanmadığı için 'false' değerini alıyoruz. Burada da Türkçe düşünelim:

Biz: "1 rakamı, 2 rakamından büyük mü veya 1 rakamı 2 rakamına eşit mi?"

GoLang: "Hem 1 rakamı 2 rakamından büyük değil hem de 1 rakamı 2 rakamına eşit değil. O yüzden cevabım 'false'."

Harika. Şimdi, diğer operatörlerimize bakalım.

'&&' sembolümüz, ‘ve’ anlamına geliyordu, değil mi? O zaman iki koşulun da gerçekleşmesi gerekir. Dikkat edin, görselde de anlattığım gibi soldaki koşul (1 == 2), ‘false’ değerini döndürür çünkü 1 rakamı, 2 rakamına eşit değildir. Sağdaki koşul da (5 < 3) aynı şekilde ‘false’ değerini döndürür çünkü 5 rakamı, 3 rakamından küçük değildir. Gördüğünüz gibi, iki koşul da ‘false’ olarak gerçekleşmiş. Dolayısıyla iki ‘false’ değeri bize, ‘false’ çıktısını verecektir. Peki, bu koşullardan bir tanesi doğru yani ‘true’ olsaydı o zaman ne olurdu? Bakalım:

Soldaki koşulumuza bakın; '1 == 2' komutu ile “1, 2’ye eşit mi?” diye soruyoruz. 1, 2’ye eşit değildir yani ‘false’ değer alır. Sağdaki ifadeye baktığımızda ise '5 > 3' komutu ile “5, 3’ten büyük mü?” diye soruyoruz. 5, 3’ten büyüktür yani ‘true’ değerini alır. Fakat biz bu iki koşulu birbirine ‘&&’ ile yani ‘ve’ ile bağladığımız için bu koşullardan birinin doğru olması yetmiyor; ikisi de doğru olmak zorundadır. Dolayısıyla çıktıda da göreceğiniz üzere değerimiz ‘false’ oluyor. Peki, ikisi de doğru olsaydı ne olurdu?

Evet, ikisi de doğru olursa yukarıda gördüğünüz gibi ‘true’ değeri dönecektir.

Şimdi, son operatörümüz olan ‘||’ yani ‘veya’ sembolüne bakalım. Bu operatör için sadece bir koşulun doğru olması yeterlidir. “X veya Y varsa Z’yi getir” cümlesinde kişi, ‘X’ yoksa ama ‘Y’ varsa ‘Z’yi yine de getirir; tam tersi şekilde ‘X’ varsa, ‘Y’ yoksa yine ‘Z’yi getirir. Örneğimize bakalım:

Yukarıda, soldaki değerin ‘false’ olduğunu; sağdaki değerin de ‘true’ olduğunu görüyoruz. Buna rağmen karşımıza çıkan sonuç ‘true’ oldu. Burada, bir değerin ‘true’ olması, sonucu ‘true’ yapmaya yeterlidir.

Evet, mantık konusunu bitirdik. Bir sonraki blogumuz tamamen bu konu ile bağlantılı olacak ve o konu sayesinde bu işi tamamen kapacaksınız. O yüzden sıkı çalışın :).


Yayınlanma Tarihi: 2022-07-24 20:31:49

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