Senin, 15 Desember 2014

struktur dan Interfaces



        
struktur dan Interface




            Structure digunakan untuk mengelompokan sejumlah data yang mempunyai tipe data yang berbeda. Variabel-variabel yang membentuk sebuah struktur dinamakan elemen struktur. Meskipun bagi kita untuk menulis program dengan menggunakan tipe data built-in Go tapi di beberapa titik itu akan menjadi sangat membosankan. Maka untuk  Mempertimbangkan program yang berinteraksi dengan bentuk sebagai berikut:

package main

import ("fmt"; "math")
 
func distance(x1, y1, x2, y2 float64) float64 {
    a := x2 – x1
    b := y2 – y1
    return math.Sqrt(a*a + b*b)
}
func rectangleArea(x1, y1, x2, y2 float64) float64 {
    l := distance(x1, y1, x1, y2)
    w := distance(x1, y1, x2, y1)
    return l * w
}
func circleArea(x, y, r float64) float64 {
    return math.Pi * r*r
}
func main() {
    var rx1, ry1 float64 = 0, 0
    var rx2, ry2 float64 = 10, 10
    var cx, cy, cr float64 = 0, 0, 5
 
    fmt.Println(rectangleArea(rx1, ry1, rx2, ry2))
    fmt.Println(circleArea(cx, cy, cr))
}


Dalam membuat program pada bahasa Go sangalah bagus dengan menggunakan struct karena sebuh struct adalah tipe yang berisi field. Misalnya kita mewakili Circle sebagai berikut
type Circle struct {
    x float64
    y float64
    r float64
}
Kita bisa membuat sebuah instance dari tipe Circle baru dalam berbagai cara:
 
var c Circle
 
Seperti dengan tipe data lain, ini akan membuat variabel Circle lokal yang secara default diatur ke nol. Untuk struct nol berarti masing-masing  diatur sesuai nilai nol (0 untuk int, 0,0 untuk mengapung, "" untuk string, nil untuk pointer, dll) Kita juga dapat menggunakan fungsi baru:
 
c := new(Circle)
 
Hal ini mengalokasikan memori untuk semua field, menetapkan masing-masing untuk nilai nol dan mengembalikan pointer. (* Circle) memberika masing-masing nilai field dengan cara sebagai berikut:
 

c: = Circle {x: 0, y: 0, r: 5}
Atau kita bisa diakses field menggunakan operator:

c: =
Circle {0, 0, 5}

Satu hal yang perlu diingat adalah bahwa argumen selalu disalin di Go. Jika kita berusaha untuk memodifikasi salah satu field dalam fungsi circleArea, itu tidak akan mengubah variabel asli. Karena ini kita akan biasanya menulis fungsi seperti ini:

func circleArea(c *Circle) float64 {
    return math.Pi * c.r*c.r
}
 
Dan change main:

c := Circle{0, 0, 5}
fmt.Println(circleArea(&c))










Tidak ada komentar:

Posting Komentar