GUI (Grafiksel Kullanıcı Arayüzü)
Arayüz (Interface)
Interface'in Go dili üzerindeki kullanımını basitçe açıklayalım. Interface struct nesnelerin, struct tipine göre ilişkili fonksiyonların çalışmasını sağlar. Detayına inmek için önce interface'in nasıl oluşturulduğuna bakalım.
interface oluşturma
1
type hesap interface{
2
hesapla()
3
}
Copied!
Yukarıda ne yaptığımıza bakacak olursak, type ile hesap isminde bir interface oluşturduk. hesapla() ise hesap interface'imiz ile ilişkili olacak fonksiyonumuzun ismi olacak.
Interface'in belirli structlar üzerinde etki göstermesi gerekiyor. Bu struct'ları da oluşturalım.
1
type toplam struct {
2
sayı1 int
3
sayı2 int
4
}
5
6
type çarpım struct{
7
sayı1 int
8
sayı2 int
9
}
Copied!
Yukarıdaki yapılarla toplanılacak ve çarpılacak sayıları barından nesneler oluşturacağız. Sonrasında bu yapılara iliştirilen struct fonksiyonlar yazacağız.
Örnek olarak:
1
işlem1 := toplam{5,10}
2
3
işlem2 := çarpım{5,10}
Copied!
Şimdi de bu structlar için fonksiyonlar oluşturalım.
1
func (t *toplam) hesapla() {
2
fmt.Println(t.sayı1 + t.sayı2)
3
}
4
5
func (ç *çarpım) hesapla() {
6
fmt.Println(ç.sayı1 * ç.sayı2)
7
}
Copied!
Yukarıdaki oluşturduğumuz fonksiyonlarda dikkat edilmesi gereken nokta iki struct fonksiyonun da ismi interface içerisinde belirttiğimiz gibi hesapla olmasıdır.
İki fonksiyonda ismini aynı yapmamızın sebebi: oluşturduğumuz interface, nesnenin tipine göre hesapla fonksiyonunu çalıştırmasıdır. Yani işlem1 nesnesini hesap interface'i ile çaşıştırıldığında toplam struct'ı olduğunu algılayıp, toplam struct'ı ile ilişkili hesapla fonksiyonu çalışacaktır. Biraz karışık bir cümle olduğunun farkındayım. O yüzden işlem yaparak öğrenebiliriz.
İlk olarak interface'imizi parametre olarak alan bir fonksiyon oluşturalım.
1
func hesapYap(h hesap){
2
h.hesapla()
3
}
Copied!
Yukarıda yaptığımız işlem çok basit. hesap interface tipini h değişkeni ile çağırdık. h.hesapla() ile fonksiyonumuzu çalıştırdık.
Gelelim interfacemizi nasıl kullandığımıza:
1
package main
2
3
import "fmt"
4
5
type hesap interface {
6
hesapla()
7
}
8
9
type toplam struct {
10
sayı1 int
11
sayı2 int
12
}
13
14
type çarpım struct {
15
sayı1 int
16
sayı2 int
17
}
18
19
func (t *toplam) hesapla() {
20
fmt.Println(t.sayı1 + t.sayı2)
21
}
22
23
func (ç *çarpım) hesapla() {
24
fmt.Println(ç.sayı1 * ç.sayı2)
25
}
26
27
func hesapYap(h hesap) {
28
h.hesapla()
29
}
30
31
func main() {
32
işlem1 := toplam{5, 10}
33
34
işlem2 := çarpım{5, 10}
35
36
37
//hesap interface'inden bir örnek oluşturalım
38
var işlem hesap
39
40
//işlem1'in adresini işlem interface'ine atayalım.
41
işlem = &işlem1
42
43
//interface toplam structı olduğunu algılayıp toplama işlemi yapcaktır.
44
hesapYap((işlem))
45
46
//işlem2'nin adresini işlem interface'ine atayalım.
47
işlem = &işlem2
48
49
//interface çarpım structı olduğunu algılayıp çarpma işlemi yapcaktır.
50
hesapYap((işlem))
51
}
Copied!
Özet geçmek gerekirse, en yukarıda interface'in tanımını yaptığım cümleyi aşağıya kopyala + yapıştır yapayım.
Interface struct nesnelerin, struct tipine göre ilişkili fonksiyonların çalışmasını sağlar.
Last modified 8mo ago
Copy link