GoLang'i bir hesap makinesi olarak kullanabilirsiniz. Yani basit matematik işlemlerini herhangi bir karışıklık olmadan yapabiliyoruz. Hemen görelim:

Yukarıda, yaptığımız tek şey fmt.Println() içerisine istediğimiz işlemi yazmak oldu ve sonuçlar terminalimizde başarılı bir şekilde gösterildi. Dikkat ederseniz yukarıda, sadece toplama, çıkarma ve çarpma işlemini yaptık; bölme işlemi bize biraz sıkıntı yarattığı için onu ayrı bir şekilde ele alacağız.

Şimdi, biraz bölme işlemine bakalım. Yukarıda, az öncekiler gibi basit bir işlem yapmaya ve 4 rakamını 3 rakamına bölmeye çalıştık. Hesap makinesi üzerinde de gördüğünüz gibi 4/3 işleminin sonucunun 1.333... çıkması gerekirken terminal üzerinde bu sonu. direkt olarak '1' şeklinde geldi. Bunun nedeni nedir?
Mantıksal açıdan baktığımız zaman int bir değer ile başka bir int değeri birbirine böldüğümüz zaman bu sonuç virgüllü yani float tipinde gelebilir. Örneğin 10/2 işleminin sonucu 5 olarak çıkacaktır; ikisi de int tipindedir ama tam bölünme sağlandığı için sonuç da int tipinde olacaktır. Fakat 10/3 yaptığınız zaman ne olur? İkisi de int veri tipinde değerlerdir, evet ama bu bölme işlemi tam bölünme sağlamadığı için yani kalanlı bölme olduğu için sonuç (3.333...) virgüllü çıkacaktır. Peki bu sorunu nasıl aşarız?

Hatırlarsanız, farklı veri tipleri ile işlem yapabilmek için 'type conversion' yapıyorduk. Burada yapmamız gereken şey aslında iki veya daha fazla değerden en az birini float tipinde tanımlamak olmalıdır. Yani 4/3 şeklinde yazmak yerine 4.0/3 şeklinde yazarsak terminal bize, doğru sonucu döndürecektir; dilerseniz ikisini de aynı şekilde yazabilirsiniz.
Aslında biraz önce gördüğünüz hesap makinesi de, siz int değer girdiğiniz zaman bunu arka planda float olarak alıp işlem yapıyor ki virgüllü bir sonuç çıkacağı zaman sorun çıkmasın. Umarım anlatabilmişimdir. Şimdi, bölme işlemindeki farklılığı anladığımıza göre bu işlemleri, değişken kullanarak biraz daha efektif bir hâle getirelim.

Yukarıdaki koda baktığımızda 'number1' ve 'number2' adında iki farklı değişken ataması yaptık ve değerlerini int veri tipinde atadık. Hemen aşağısındaki fmt.Println() satırlarında sırasıyla toplama, çıkarma ve çarpma işlemi yaptık. Az öncekinden tek farkı, sade bir şekilde sayıları yazmadık; değişkenleri yazarak işlem yaptık. Örneğin fmt.Println(number1 + number2) kodunun Türkçe karşılığı:" 'number1' ve 'number2' değişkenlerinin değerlerini topla ve sonucunu ekrana yazdır." şeklindedir.
Dilersek, bu kodu daha anlaşılır bir hâle dönüştürebiliriz:

Yukarıdaki kodda yaptığımız tek değişiklik; fmt.Println() fonksiyonu içerisine açıklayıcı bir metin eklemek ve bu metin ile değişkenleri ',' (virgül) ile birbirinden ayırmak oldu. Şimdi size bir sorum var; eğer değişkenler, kod sayfasının her yerinde kullanılabiliyorsa çıkan sonuçları da birer değişkene atarsak ne olur? Yani örneğin 1500 satır sonra tekrar number1 ve number2 değişkenini toplamamız gerektiğini düşünün. Her seferinde 'number1 + number2' şeklinde bir kod mu yazacağız? O zaman esnekliğimizi kaybederiz. Hemen bakalım:

Yukarıdaki koda dikkatli bakalım. Değişkenlerimiz aynı şekilde duruyor; onda sıkıntı yok. Kırmızı kutu içerisinde, ilk satıra baktığımızda 'answerOfAddition := number1 + number2' şeklinde bir kod görüyoruz. Bu kodun anlamı: "number1 ve number2 değişkenlerinin toplamını answerOfAddition değişkeninde sakla." şeklindedir. Bu sayede ben dilediğim yerde 'number1 + number2' yazmak yerine sadece değişkenin ismini yani 'answerOfAddition' değişkenini yazabilirim.
Değişkenler İngilizce olduğu için aklınız karışmış olabilir. Değişken tanımlama konusunda söylediklerimizi hatırlayın: "Değişkenler açıklayıcı olmalıdır ve birden fazla kelimeden oluşuyorsa ilk harf küçük, diğer kelimelerin ilk harfleri büyük olur." Bu durumda o değişkenin anlamı 'Answer Of Addition' yani 'Toplama İşleminin Cevabı' şeklindedir ve diğer değişkenler de aynı şekildedir. Kelimelerin Türkçe karşılıklarını //... şeklinde ekran görüntüsünde görebilirsiniz.
Bu şekilde, kırmızı kutudaki çıkarma ve çarpma işlemlerini de bir değişkende sakladık yani bir değişkene atadık. fmt.Println() fonksiyonlarına (yeşil kutu) baktığımız zaman bu sefer 'fmt.Println("Toplama işleminin sonucu:", number1 + number2)' şeklinde kaba bir şekilde yazmadık. Bilgilendirici metnimizi yazdıktan sonra virgül koyup sadece; az önce toplama, çıkarma ve çarpma işlemlerini sakladığımız değişkenlerin isimlerini yazdık. Yani;
fmt.Println("Toplama işleminin sonucu:", answerOfAddition)
fmt.Println("Toplama işleminin sonucu:", answerOfSubstraction)
fmt.Println("Toplama işleminin sonucu:", answerOfMultiplication)
Kodlarımızı bu şekilde daha efektif bir şekilde yazdığımızda sonuçlarımızın yine doğru bir şekilde geldiğini görüyoruz. Şimdi, temel matematik için gördüklerimize ek olarak aynı şeyleri bölme işlemi için de görelim.

Az önce, bölme işlemini direkt olarak sade sayılar ile yaptık. Bu sefer, diğer işlemler için yaptıklarımız gibi iki değişken atadık ve bunları değişkenleri yazarak böldük. Fakat hatırlayın; en az bir tanesinin değeri float tipinde olmalıydı. Yukarıdaki kodda sonucumuzun 1.66...7 yerine 1 olarak çıkması bundan kaynaklanıyor. Şimdi bunu düzelteceğiz.

İşte, değişkenlere verdiğimiz int tipi değerleri float tipi değerler ile değiştirdikten sonra doğru sonucumuz olan 1.66...7 sonucunu elde ettik. Şimdi, bölme işlemini de efektif bir hâle getirmeye çalışaım:

Artık bu işin mantığına hakimsiniz. Değişkenlerimiz aynı şekilde kalıyor. Buna ek olarak 'answerOfDivision' adında bir değişken tanımlayıp bu değişkene yukarıdaki sayıların bölümünü atıyoruz. Bu sayede her yerde sadece 'answerOfDivision' değişkenini kullanarak işlem yapabiliriz. Şimdi, değişkenlerin ne kadar önemli olduğunu görelim.
Amacımız, hiç değişmeyen (sabit) iki sayının toplamının 5'e bölümünü bulmak olsun.

Yukarıdaki kod, gerçekten de amacımızı yerine getirmiş; sonucumuz doğru ama ne kadar efektif bir kod yazdık? Değişkenlerimizi atadık ve '(number1 + number2) / 5' şeklinde bir işlem yaptık. Şimdi, bir başka yönteme bakalım.

Yine aynı değişkenlere sahibiz. Fakat burada 'answerOfAddition' değişkenine, sayıların toplamını atadık. Bölme işlemi yapacağımız zaman uzun ve kabaca 'fmt.Println((number1 + number2) / 5)' şeklinde yazmak yerine 'fmt.Println(answerOfAddition / 5)' yazmamız yeterli oldu. Üstelik dediğim gibi; bu kodu binlerce satır sonra da bu şekilde kullanabilirsiniz.
Şimdi, bir sayının kuvvetini ve karekökünü hesaplamayı öğrenelim.

Her şeyden önce 'import' kısmına bakmanızı istiyorum. Nasıl ki 'fmt' modülünü oraya yazdıktan sonra 'fmt' modülü içerisindeki fonksiyonları (Println() gibi) çalıştırabildiysek GoLang'de bulunan 'math' modülünü de o kısıma yazıp çeşitli matematiksel işlemleri, içerisinde bulunan fonksiyonlar ile rahatça yapmamıza olanak tanır. Örneğin en başta bulunan 'Abs' fonksiyonu ile bir sayının veya bir işlemin sonucunun mutlak değerini alabilirsiniz. Biz bu kısımda üslü işlem yapmayı karekök almayı öğreneceğiz.
İlk önce üslü işlem yapmayı öğrenelim.

Yukarıdaki koda dikkat edin; 'math' modülünü 'import' ettik yani projeye dahil ettik. Daha sonra 'main' fonksiyonu içerisine 'answer' adında bir değişken tanımladık ve satırın ilerleyen kısımlarında 'math.Pow()' yazdık. 'Pow()' fonksiyonu, üslü işlem yapabilmemize olanak tanır. 'math.Pow()' demek, "Bana math modülündeki Pow fonksiyonunu getir." şeklinde yorumlanabilir.
Pow() fonksiyonu, içerisine iki değer alır. Bu değerlerin ilki taban, ikincisi ise üs olarak algılanır. Zaten kodu yazarken bize bunu anlatıyor; alt taraftaki kırmızı kutuya dikkat edin. "Pow(x float64, y float64)" şeklinde bir ibare mevcut. Bu ibare bize, bu fonksiyonun; bir adet taban ve bir adet üs değeri olması gerektiğini anlatır. Ayrıca girilen bu iki sayının da float64 tipinde olacağını belirtir. Yani biz int bir değer girsek bile Go, arkada bunları float olarak alacaktır.
Hemen altındaki ifadeye bakalım: "Pow returns 'x**y' ". Bu ifadenin Türkçe karşılığı şudur: "Pow fonksiyonu x üzeri y döndürür". Bazı programlama dillerinde (örneğin Python), üs alma işlemi yine math modülü ile yapılabilir ama x**y şeklinde yapılması da kabul görür. Burada x taban değer olurken y üs kısmıdır. "the base-x exponential of y" ifadesinin Türkçesi ise şu şekildedir: "x, y'nin tabanıdır."
Devam edelim:

'answer' değişkenine 'math.Pow()' ifadesi ile 2 üzeri 3 işlemini yapmasını söyledik. Daha sonra 'fmt.Println()' ifadesiyle de bunu ekrana vermesini istedik. Sağ olsun bütün isteklerimizi yerine getiriyor. Peki, burada az önceki işlem tutucu değişkenleri tanımlayabilir miyiz? Kesinlikle. Görelim:

Mantık tamamen aynı. İki adet değişken atadık; bu değişkenler ile üs hesaplaması yapacağız. Dikkat edin; 'answeOfSquare' değişkeninde, 'math.Pow()' ile direkt olarak işlem yapmasını söylemedik; önce işlemi değişkene atadık. Daha sonra fmt.Println() ile o işlemin sonucunu yazdık. Genel olarak şu şekilde özet verebiliriz: " 'answeOfSquare' değişkenine, daha önce tanımladığımız 'number1' ve 'number2' değişkenleri ile işlem yapma yetkisi verdik. math.Pow() içerisindeki 'number1' taban olurken 'number2' üs oldu yani 10 üzeri 2 şeklinde bir işlem yaptık ve sonucumuz doğru bir şekilde geldi. "
Şimdi, karekök alma işlemine bakalım.

Karekök alma işlemini, 'math' modülü içerisindeki 'Sqrt' fonksiyonu ile gerçekleştiriyoruz ve mantık tamamen aynı şekilde. 'math.Sqrt()' fonksiyonu içerisine karekökünün alınmasını istediğimiz değeri float bir biçimde veriyoruz. Kısacası ikinci kırmızı kutudaki kod satırı ile Go'ya, "16'nın karekökünü al" şeklinde bir komut vermiş olduk. Hemen altındaki 'fmt.Println()' fonksiyonu ile birlikte bu sonucu yazdırdık.
Kök alma işlemini az önceki gibi de yapabiliriz:

'number1' adında bir değişken atadık ve bu değişkenin değerini float cinsinden 25 olarak tanımladık. Bir alt satırda 'answerOfRoot' değişkenine, 'number1' değişken değerinin kökünü alma yetkisi verdik. Son olarak 'fmt.Println()' ile birlikte bu işlemin sonucunu yazdırdık.
Diğer işlemleri deneye yanıla veya araştırarak öğrenebilirsiniz. Biz de ilerleyen zamanlarda bu yazıyı güncelleyebiliriz. Güncellemeleri Telegram ve Instagram üzerinden duyuruyoruz; bize katılmayı unutmayın.
Yayınlanma Tarihi: 2022-07-19 19:33:26
Son Düzenleme Tarihi: 2022-08-17 16:22:35