August 15, 2022 Re: Dizilerde karışık türler | ||||
---|---|---|---|---|
| ||||
Posted in reply to Cos00kun | Başka bir soruyla geleyim; benim anladığım normal standart yani static diziler kopyalandıklarında ayrı bir değişken gibi işlem görürken, dinamik diziler ise sanki referans gibi işlem görüyor örneğin; import std.stdio; void main() { int[4] dizi1= [0, 10, 20, 30]; int[4] dizi2 = dizi1; dizi1[1]= 100; writeln(dizi1); writeln(dizi2); } şöyle bir kodu derlediğimizde statik diziler kullanıldığından beklendiği gibi sonuç; [0, 100, 20, 30] [0, 10, 20, 30] çıkacaktır . Ancak referans gibi çalışan Dinamik dizilerde (gibi dememin sebebi hala çözememiş olduğum aşağıdaki konu yüzündedndir yoksa direkt referans diyecektim) şu örnekte; import std.stdio; void main() { int[] dizi1= [0, 10, 20, 30]; int[] dizi2 = dizi1; dizi1[1]= 100; writeln(dizi1); writeln(dizi2); } madem referans gibi! o halde elbette sonuç; [0, 100, 20, 30] [0, 100, 20, 30] oluyor.. Buraya kadar sorun yok herşey yerli yerinde ancak şunu yaptığım vakit; import std.stdio; void main() { int[] dizi1= [0, 10, 20, 30]; int[] dizi2 = dizi1; dizi1 ~= 40; dizi1[1]= 100; writeln(dizi1); writeln(dizi2); } sonuç; [0, 100, 20, 30, 40] [0, 100, 20, 30] madem referans ise yada referans gibi davranıyorsa dinamik diziler neden dizi1e eklenen eleman dizi2 de gösterilmiyor ? |
August 15, 2022 Re: Dizilerde karışık türler | ||||
---|---|---|---|---|
| ||||
Posted in reply to Cos00kun | On 8/15/22 03:50, Cos00kun wrote: > void main() { > int[] dizi1= [0, 10, 20, 30]; > int[] dizi2 = dizi1; > dizi1 ~= 40; > dizi1[1]= 100; > writeln(dizi1); > writeln(dizi2); > } > > sonuç; > [0, 100, 20, 30, 40] > [0, 100, 20, 30] > > madem referans ise yada referans gibi davranıyorsa dinamik diziler neden > dizi1e eklenen eleman dizi2 de gösterilmiyor ? Bunun yanıtını görmek için bir gözlem sunacağım ve başka bir soru soracağım. Gözlem: Aslında dizi1 ve dizi2 dinamik dizi değildirler, dilimdirler (slice). Evet, olayın arkasında dinamik dizi(ler) vardır ama o diziler D runtime (veya çöp toplayıcı (GC)) denen bir varlık tarafından sahiplenilmiş olan ve isimleri olmayan eleman topluluklarıdır. Dilimler, o elemanlara erişim sağlarlar; yani, eleman referanslarıdır. Bence referans konusu öylece açıklanıyor. Şimdi başka bir soru: import std.stdio; void main() { int[] d = [ 1, 2, 3, 4 ]; int[] başı = d[0..$/2]; int[] sonu = d[$/2..$]; writeln(başı); // [1, 2] writeln(sonu); // [3, 4] } Peki, `başı ~= 100` yaptığımızda ne olsun? Seçenekler: a) Nasıl olsa referans olduklarından, bir sonraki elemanın üstüne yazılsın: başı: [ 1, 2, 100 ] <-- başı uzadı d: [ 1, 2, 100, 4 ] <-- 3'ün üzerine yazıldı sonu: [ 100, 4] <-- 3'ün üzerine yazıldı (O galiba C#'ın seçtiği yöntemmiş.) b) Varolan elemanlar korunsunlar ve yeni dilim yepyeni elemanlar edinsin. Bu da D'nin seçimi... Bunun adına "no stomping" deniyor. Yani, varolan elemanların üzerine yazılmıyor: başı: [ 1, 2, 100 ] <-- Yepyeni adresteler d: [ 1, 2, 3, 4 ] <-- Korunmuş sonu: [ 3, 4 ] <-- Korunmuş Ali |
August 15, 2022 Re: Dizilerde karışık türler | ||||
---|---|---|---|---|
| ||||
Posted in reply to Cos00kun | On 8/15/22 03:50, Cos00kun wrote: > Başka bir soruyla geleyim; Bence konular böyle uzatılırsa yararları azalıyor. Örneğin, bu yeni sorunun "Dizilerde karışık türler" ile ilgisi yok. ;) Ali |
August 15, 2022 Re: Dizilerde karışık türler | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli | On Monday, 15 August 2022 at 14:15:05 UTC, Ali Çehreli wrote:
>
> (O galiba C#'ın seçtiği yöntemmiş.)
>
> b) Varolan elemanlar korunsunlar ve yeni dilim yepyeni elemanlar edinsin. Bu da D'nin seçimi... Bunun adına "no stomping" deniyor. Yani, varolan elemanların üzerine yazılmıyor:
>
> başı: [ 1, 2, 100 ] <-- Yepyeni adresteler
> d: [ 1, 2, 3, 4 ] <-- Korunmuş
> sonu: [ 3, 4 ] <-- Korunmuş
>
> Ali
Hmmm tamamra ali hocam anladım. Benim hatam o dilimlere referans gibi davranmak olmuş. Yan ali ye MehmetAli demiş gibi oldum.
|
August 15, 2022 Re: Dizilerde karışık türler | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli | On Monday, 15 August 2022 at 14:16:25 UTC, Ali Çehreli wrote:
> On 8/15/22 03:50, Cos00kun wrote:
> > Başka bir soruyla geleyim;
>
> Bence konular böyle uzatılırsa yararları azalıyor. Örneğin, bu yeni sorunun "Dizilerde karışık türler" ile ilgisi yok. ;)
>
> Ali
Anlaşıldı. Ben buradaki forum düzenine henüz alışamadım ama dediğin doğru Ali hocam. Tamamdır
|
Copyright © 1999-2021 by the D Language Foundation