Skip to content

Commit af3cd18

Browse files
author
murat.genc
committed
Update 02.5.md
section 02.5 (object-oriented) added
1 parent b5167c4 commit af3cd18

File tree

1 file changed

+51
-51
lines changed

1 file changed

+51
-51
lines changed

tr/02.5.md

Lines changed: 51 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ type Dikdortgen struct {
1414
genislik, yukseklik float64
1515
}
1616

17-
func alan(r Dikdortgen) float64 {
18-
return r.genislik * r.yukseklik
17+
func alan(d Dikdortgen) float64 {
18+
return d.genislik * d.yukseklik
1919
}
2020

2121
func main() {
@@ -32,13 +32,13 @@ Yukarıdaki örnek bir Dikdortgen'in alanını hesaplayabilir. Burada `alan` isi
3232

3333
![](images/2.5.rect_func_without_receiver.png?raw=true)
3434

35-
Figure 2.8 Fonksiyon ve struct arasındaki ilişki
35+
Şekil 2.8 Fonksiyon ve struct arasındaki ilişki
3636

3737
Açıkçası bu hiç hoş değil. Ayrıca, alan fonksiyonu bir dairenin veya dikdörtgenin özelliği olmalıdır.
3838

39-
İşte `method` un devreye gireceği nokta burasıdır. `method`, bir türe/tipe bağlı fonksiyondur. `func` anahtar sözcüğünün, bu methodun ana gövdesi olan `receiver` adlı bit parametreye sahip olması haricinde, fonksiyonlar benzer bir sözdizimi vardır.
39+
İşte `method` un devreye gireceği nokta burasıdır. `method`, bir türe/tipe bağlı fonksiyondur. `func` anahtar sözcüğünün, bu methodun ana gövdesi olan `receiver` adlı bit parametreye sahip olması haricinde, fonksiyonlara benzer bir sözdizimi vardır.
4040

41-
Aynı örneği kullanarak, `Dikdortgen.Alan()` çevresel bir fonksiyon yerine doğrudan Dikdortgen'e aittir. Daha spesifik olarak, `yukseklik`, `genislik` ve `Alan()` hepsi Dikdortgen'e aittir.
41+
Aynı örneği kullanarak, `Dikdortgen.Alan()` çevresel bir fonksiyon olması yerine doğrudan Dikdortgen'e ait bir methoddur. Daha spesifik olarak, `yukseklik`, `genislik` ve `Alan()` hepsi Dikdortgen'e aittir.
4242

4343
Rob Pike'ın dediği gibi.
4444

@@ -96,11 +96,11 @@ Methodları kullanma notları.
9696

9797
![](images/2.5.shapes_func_with_receiver_cp.png?raw=true)
9898

99-
Figure 2.9 Methodlar farklı struct larda farklıdırlar.
99+
Şekil 2.9 Methodlar farklı struct larda farklıdırlar.
100100

101-
Yukarıdaki örnakte Alan() methodu hem Dikdortgen hem de Daire'de mevcuttur, bu nedenle alıcıları Dikdortgen ve Daire'dir.
101+
Yukarıdaki örnekte Alan() methodu hem Dikdortgen hem de Daire'de mevcuttur, bu nedenle alıcıları Dikdortgen ve Daire'dir.
102102

103-
One thing that's worth noting is that the method with a dotted line means the receiver is passed by value, not by reference. The difference between them is that a method can change its receiver's values when the receiver is passed by reference, and it gets a copy of the receiver when the receiver is passed by value.
103+
Önemsiz bir detay olarak bir method noktalı çizgi ile kullanılmışsa anlamı alıcıya referans olarak değil değer olarak geçirilmiştir demektir. Aralarındaki fark, bir methodun, alıcısı referansla geçildiğinde alıcının değerlerini değiştirebilmesi ve değer olarak geçildiğinde ise alıcının bir kopyasını almasıdır.
104104

105105
Alıcı sadece bir struct'mı olmalıdır? Tabii ki değil. Herhangibir tür/tip methodun alıcısı olabilir. Özelleştirilmiş türler/tipler hakkında kafanız karışabilir. struct özel bir tür/tip dir - daha birçok özelleştirilmiş tür/tip yer almaktadır.
106106

@@ -200,7 +200,7 @@ func main() {
200200
fmt.Println("En büyük kutu", kutular.EnBuyuklerininRengi().String())
201201

202202
// Hepsini siyaha boyayalım
203-
boxes.SiyahaBoya()
203+
kutular.SiyahaBoya()
204204

205205
fmt.Println("İkinci kutunun rengi", kutular[1].renk.String())
206206
fmt.Println("En büyüğü", kutular.EnBuyuklerininRengi().String())
@@ -209,7 +209,7 @@ func main() {
209209

210210
Bazı sabitleri ve özelleştirilmiş tür/tipleri tanımlarız
211211

212-
- `Renk` 'i `byte` 'ın takma adı olarak kullanın.
212+
- `Renk`'i `byte` 'ın takma adı olarak kullanın.
213213
- Hacim, yukseklik, genislik, derinlik ve renk alanlarını içeren `Kutu` struct ını tanımlayın.
214214
- `Kutu` yu alanı olarak alan `KutuListesi` strruct ı tanımlayın.
215215

@@ -231,88 +231,88 @@ Bir alıcının bir methodun ilk argümanı olduğunu görürsek, nasıl çalı
231231

232232
Neden RenkAta() methodunda `k.Renk = r` yerine` (*k).Renk = r` kullanmadığımızı soruyor olabilirsiniz. Her iki kullanımda da sorun yok çünkü Go bu görevi nasıl gerçekleştireceğini bilir. Şimdi Go'nun daha büyüleyici olduğunu düşünmüyor musunuz?
233233

234-
You may also be asking whether we should use `(&kl[i]).RenkAta(SIYAH)` in `SiyahaBoya` because we pass a pointer to `RenkAta`. Again, either one is OK because Go knows how to interpret it!
234+
Ayrıca `SiyahaBoya` methodunda da neden `(&kl[i]).RenkAta(SIYAH)` kullanıp kullanmamamız gerektiğini de sorabilirsiniz. Çünkü `RenkAta` methoduna bir işaretçi geçmişizdir zaten. Yine iki kullanımda Go için problem değil, ikisinin de nasıl yorumlanacağını bilir!
235235

236-
### Inheritance of method
236+
### method kalıtımı
237237

238-
We learned about inheritance of fields in the last section. Similarly, we also have method inheritance in Go. If an anonymous field has methods, then the struct that contains the field will have all the methods from it as well.
238+
Son bölümde alanların kalıtımını öğrendik. Benzer şekilde Go'da method kalıtımı da vardır. Eğer anonim bir alanın methodları varsa, alanı içeren struct da ondaki tüm methodlara sahip olacaktır.
239239
```Go
240240
package main
241241

242242
import "fmt"
243243

244-
type Human struct {
245-
name string
246-
age int
247-
phone string
244+
type Insan struct {
245+
ad string
246+
yas int
247+
telefon string
248248
}
249249

250-
type Student struct {
251-
Human // anonymous field
252-
school string
250+
type Ogrenci struct {
251+
Insan // anonymous field
252+
okul string
253253
}
254254

255-
type Employee struct {
256-
Human
257-
company string
255+
type Calisan struct {
256+
Insan
257+
sirket string
258258
}
259259

260-
// define a method in Human
261-
func (h *Human) SayHi() {
262-
fmt.Printf("Hi, I am %s you can call me on %s\n", h.name, h.phone)
260+
// Insan içinde bir method tanımı
261+
func (i *Insan) Merhaba() {
262+
fmt.Printf("Merhaba, Benim adım %s. Bana %s nolu telefondan ulaşabilirsiniz.\n", i.ad, i.telefon)
263263
}
264264

265265
func main() {
266-
sam := Employee{Human{"Sam", 45, "111-888-XXXX"}, "Golang Inc"}
267-
mark := Student{Human{"Mark", 25, "222-222-YYYY"}, "MIT"}
266+
murat := Calisan{Insan{"Murat", 45, "555 5555555"}, "Golang Inc"}
267+
adem := Ogrenci{Insan{"Adem", 25, "555 5555556"}, "MIT"}
268268

269-
sam.SayHi()
270-
mark.SayHi()
269+
murat.Merhaba()
270+
adem.Merhaba()
271271
}
272272
```
273273
### Method Overriding
274274

275-
If we want Employee to have its own method `SayHi`, we can define a method that has the same name in Employee, and it will hide `SayHi` in Human when we call it.
275+
Eğer Calisan'ın kendi `Merhaba` methoduna sahip olmasını istiyorsak, Calisan'da aynı adı tasıyan bir method tanımlayabiliriz ve böylece `Merhaba` methodunu çağırdığımızda Insan içinde tanımlı olan method gizlenecektir.
276276
```Go
277277
package main
278278

279279
import "fmt"
280280

281-
type Human struct {
282-
name string
283-
age int
284-
phone string
281+
type Insan struct {
282+
ad string
283+
yas int
284+
telefon string
285285
}
286286

287-
type Student struct {
288-
Human
289-
school string
287+
type Ogrenci struct {
288+
Insan
289+
okul string
290290
}
291291

292-
type Employee struct {
293-
Human
294-
company string
292+
type Calisan struct {
293+
Insan
294+
sirket string
295295
}
296296

297-
func (h *Human) SayHi() {
298-
fmt.Printf("Hi, I am %s you can call me on %s\n", h.name, h.phone)
297+
func (i *Insan) Merhaba() {
298+
fmt.Printf("Merhaba, Benim adım %s. Bana %s nolu telefondan ulaşabilirsiniz.\n", i.ad, i.telefon)
299299
}
300300

301-
func (e *Employee) SayHi() {
302-
fmt.Printf("Hi, I am %s, I work at %s. Call me on %s\n", e.name,
303-
e.company, e.phone) //Yes you can split into 2 lines here.
301+
func (c *Calisan) Merhaba() {
302+
fmt.Printf("Merhaba, Benim adım %s, %s şirketinde çalışıyorum. Bana %s bu numaradan ulaşabilirsiniz.\n", c.ad,
303+
c.sirket, c.telefon) //Evet burada iki satıra ayırarak yazabilirsiniz.
304304
}
305305

306306
func main() {
307-
sam := Employee{Human{"Sam", 45, "111-888-XXXX"}, "Golang Inc"}
308-
mark := Student{Human{"Mark", 25, "222-222-YYYY"}, "MIT"}
307+
murat := Calisan{Insan{"Murat", 45, "555 5555555"}, "Golang Inc"}
308+
adem := Ogrenci{Insan{"Adem", 25, "555 5555556"}, "MIT"}
309309

310-
sam.SayHi()
311-
mark.SayHi()
310+
murat.Merhaba()
311+
adem.Merhaba()
312312
}
313313

314314
```
315-
You are able to write an Object-oriented program now, and methods use rule of capital letter to decide whether public or private as well.
315+
Artık Nesne-yönelimli program yazabiliyorsunuz. methodların dışarıya açık olup olmayacağını(public/private) method isminin ilk harfini büyük/küçük yaparak sağlayabilirsiniz.
316316

317317
## Links
318318

0 commit comments

Comments
 (0)