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
Permalink
Reply