Sabitler (Constants)
Constant ifadeler sabitler olarak bilinirler. Değişken ifadelerinden farklı olarak, bir defa değer atandığı an itibariyle sistemde sabit kalırlar. İşleme tabi tutulsalar dahi, işlem bitişinde yine değerleri sabit olmaktadır.
Bir const ifadesi aşağıdaki biçimde yazılır:
const ifade = deger
Aşağıda bir örnek vermek gerekirse:
// suyun kaynama noktası
const boiling_point = 100
const ifadeleri var ifadelerinden farklı olarak ikinci bir değer ataması alamazlar. Tanımlandıkları biçimde sabit kalırlar.
DİKKAT:
constifadeleriscopeiçinde ve dışında tanımlanabilir.
const İfadelerin Veri Türleri
const ifadeler aşağıda yer alan tüm veri tiplerinde veri taşıyabilirler.
- Integer -
int - Float -
float32,float64vs. - String -
string - Boolean -
bool - Character -
runebyte()gibi tek bir karakter
const İfadelerin Kullanımı
GeeksForGeeks web sitesinden alınan örnek ifade aşağıda verilmiştir.
package main
import "fmt"
const PI = 3.14
func main()
{
const GFG = "GeeksforGeeks"
fmt.Println("Hello", GFG)
fmt.Println("Happy", PI, "Day")
const Correct= true
fmt.Println("Go rules?", Correct)
}
ifadede görüldüğü üzere PI isimli float bir sabit değer tanımlanmıştır. Burada dikkat etmemiz gereken nokta const ifadelerinin scope (fonksiyon tanımlanan aralık) dışında da tanımlanabildiğidir.
Yazılmamış (Untyped) ve Yazılı (Typed) Sayısal Sabitler
Yazılan sabitler (typed constants), sabitlenmiş değişkenler gibi çalışır, yalnızca aynı türle birlikte çalışabilir ve tür bilgisi yazılmamış sabitler (untyped constants), değişmezler gibi çalışır, benzer türlerle birlikte çalışabilir.
Sabitler (constants), Go'da bir türle veya türsüz olarak bildirilebilir.
Aşağıda, hem typed hem de untyped biçimde belirtilmiş ifadeler örneklenmiştir.
//veri tipi belirtilmemiş
const untypedInteger = 123
const untypedFloating = 123.12
//veri tipi belirtilmiş
const typedInteger int = 123
const typedFloatingPoint float64 = 123.12
Yazılı ve Yazılı Olmayan Sabitlere Ait Örnek Uygulama
Aşağıda belirli sabitler tanımlanmıştır ve bu sabitlerle rastgele işlemler yapılmıştır.
package main
import "fmt"
const Pi = 3.14 // untyped
const Euro float32 = 18.78 // typed
const yil = 2022 // untyped
const kurulus int = 1923 //typed
func main() {
test := Euro * yil // tanımli sabit Euro ile tanımsiz sabit yil carpiliyor
test2 := Pi * Euro // tanımli sabit Euro ile tanımsız sabit Pi carpiliyor
test3 := Pi * yil // tanımsız sabit pi ile tanımsız sabit yil carpiliyor
/* a
test3 := kurulus * Euro
yukarıdaki ifade hata verecektir
cünkü kurulus tanımlı sabit Euro da tanımlı sabittir
ve veri tipleri farklıdır. tip dönüşümü gerekmektedir.
kurulus int degerini float32 'ye cevirerek isleme sokabiliriz.*/
test4 := float32(kurulus) * Euro
fmt.Println(test)
fmt.Println(test2)
fmt.Println(test3)
fmt.Println(test4)
}
Tip Dönüşümü
İfademizde notları incelediyseniz tanımlama sırasında bir noktada tip dönüşümü yaptık. Bunun sebebi ise bu değerin tip tanımlı bir sabit olmasıdır. Bu sebepten dolayı GO otomatik olarak uygun değere çeviremez ve yeniden tip elle tip tanımlaması yapmamız gerekir.
// tip dönüşümü
test4 := float32(kurulus) * Euro //int veri tipini float32 veri tipine cevirdik
Sabit Türleri
GOLANG içerisinde sabit türleri çeşitli olmakla birlikte temel başlıklar altında toplanabilir.
- Metin Sabitleri - String Literals
- Sayısal Sabitler - (Integer, Float , Complex )
- Boolean Sabitleri
Metin Sabitleri
- Go, iki tür değişmez
stringyi destekler, yani ” ” (çift tırnak stili) ve ' '(geri alıntı). stringifadeler + ve += operatörleriyle birleştirilebilir.- Bir
string, karakter değişmezlerine benzer karakterler içerir: düz karakterler (plain characters), kaçış dizileri (escape sequences ) ve evrensel karakterler (universal characters). Ve bu, yazılmamış karakterlerdendir. stringtürlerinin sıfır değerleri, değişmez olarak ” ” veya ” ile gösterilebilen boşstringlerdir.stringtürlerinin tümü, == (equal) , != (not equal) ve (aynı türlerin karşılaştırılması için) gibi operatörler kullanılarak karşılaştırılabilir.
package main
import "fmt"
func main()
{
const A = "GOKAYBURUC.DEV"
var B = "Medium Blog Page"
// Concat strings. - String ifadelerin birleştirilmesi
var karsilama = A+ " " + B
karsilama += "!"
fmt.Println(karsilama)
// Compare strings. - String ifadelerin karşılaştırılması
fmt.Println(A == "GOKAYBURUC")
fmt.Println(B < A)
}
Boolean Sabitleri
true ve false değeri alan sabitlerdir.
package main
import "fmt"
const Pi = 3.14
func main()
{
// degeri true olan bir const tanımladık
const trueConst = true
// Type definition using type keyword - Veri Tipi Tanımlama
type myBool bool
// const ifadeyi bir değişkene atadık
var defaultBool = trueConst // izin verilir
var customBool myBool = trueConst // izin verilir
// defaultBool = customBool // izin verilmez
fmt.Println(defaultBool)
fmt.Println(customBool)
}
Tamsayı (Integer) Sabitleri
Tamsayı integer sabitleri çeşitli değişkenlik göstermektedir.
Burada sayı yazılımları :
- Decimal : Ondalık ( 10 luk sayı sistemi )
- Octal : Sekizlik ( 8 'lik sayı sistemi )
- Hexadecimal : On altılık (16'lık sayı sistemi)
- Int : Tamsayı
- Unsigned Int : İmzasız integer
- Long : Uzun veri tipi - C Kökenli bir veri tipidir. ( 2^64 ifadesini getirir)
85 /* decimal */
0213 /* octal */
0x4b /* hexadecimal */
30 /* int */
30u /* unsigned int */
30l /* long */
30ul /* unsigned long */
212 /* Legal */
215u /* Legal */
0xFeeL /* Legal */
078 /* Illegal: 8 is not an octal digit */
032UU /* Illegal: cannot repeat a suffix */
Örnek ifademizi tanımlayalım.
package main
import "fmt"
const ekmek int = 5
func main() {
//const ekmek = 5
var sepet int = 30
yarimSepet := sepet / 2
yarimEkmek := ekmek / 2
fmt.Println(yarimEkmek)
fmt.Println(yarimSepet * ekmek)
// bu ifade hata verecektir. sabit bir deger ikinci bir atama kabul etmez
ekmek = ekmek / 2
fmt.Println(ekmek)
}
Ondalık (Float) Sabitleri
Ondalık sabitler olarak tanımlanır.
3.14159 /* Legal */
314159E-5L /* Legal */
510E /* Illegal: incomplete exponent */
210f /* Illegal: no decimal or exponent */
.e55 /* Illegal: missing integer or fraction */
Kompleks Sayı (Complex) Sabitleri
2 değerle tanımlanan komplex sayılar için kullanılır. Aşağıdaki iki tanımlama da geçerli bir tanımlamadır.
const ilk = (0.0, 0.0)
const sinirlar = (-123.456E+30, 987.654E-29)
Tip Tanımlama - Type Definition
Type Definition (Tip Tanımlama): GOLANG içinde eğer yeni bir tip tanımlamak istiyorsanız
//type tipAdı veriTürü
type benimVeriTipim string
sentaks değerini izlersiniz.