http://ddili.org/ders/d/dilimler.html
Aslında tam yeni değil: eski "Dilimler ve Aralıklar" dersinin genişletilmiş hali...
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]
Thread overview | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
February 02, 2011 Yeni ders: Başka Dizi Olanakları | ||||
---|---|---|---|---|
| ||||
http://ddili.org/ders/d/dilimler.html Aslında tam yeni değil: eski "Dilimler ve Aralıklar" dersinin genişletilmiş hali... Ali -- |
February 03, 2011 Yeni ders: Başka Dizi Olanakları | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli (acehreli) | Çok güzel olmuş. Bu arada eşleme tablosuda genişletilmeli. Onuda belki ilk ben genişletmeyi denerim. Ancak bunu en erken yarından sonraki gün yapabilirim. Bu arada notlar aldım: Alıntı: >Not: Bu dersi yazdığım sırada kullandığım dmd 2.051 bu işlemleri henüz dinamik dizilerde desteklemiyor. O yüzden bu başlık altındaki örneklerde hep sabit uzunluklu diziler kullanıyorum. Ben destekliyor sanıyordum ancak denedim desteklemiyor. Ancak belki bile bile desteklenmiyor olabilir mi? Çünkü dinamik dizide kullanılacak ise kullanılan dizilerin uzunluklarının eşit olması ve sağında eşlenen dizininde eşit olması gerekir yoksa range violation hatası almamıza neden olmaz mı? Belki programcı uzunlukla uğraşıp hata yapmasın diye eklenmiyordur?Derste "Uzunluğun artması paylaşımı sonlandırır" denmiş ve bir örnek verilmiş:
Ancak uzunluğun azaltılmasıda paylaşımı sonlandırmaz mı? Eğer öyle olursa "Uzunluğun değişmesi paylaşımı sonlandırır." denmesi daha doğru olur. Azalmaya örnek:
Bu arada array-wise hakkında düşündüklerimi paylaşacağım bir yazı yazmak istiyorum. Onun üzerinde tartışarak bence array-wise'in kullanılmamasını düşünebiliriz. Eğer yazacağım yazıya bende inanırsam paylaşırım. Yoksa rezil olmamak için paylaşmam. :-D -- |
February 03, 2011 Yeni ders: Başka Dizi Olanakları | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli (acehreli) | Alıntı: >Çok iyi fikir ama diğer tarafları tek kişinin ağzından olunca ikinci yazarın tarzı uymayabilir. Eğer eksiklikleri bilirsem kendi ağzımla yazmak isterim. Kasten bende öyle isterim :-) Bence büyütülmesi gereken alanlar:
(eşleme tablosu doğru bir kullanım mı?) -- |
February 03, 2011 Yeni ders: Başka Dizi Olanakları | ||||
---|---|---|---|---|
| ||||
Posted in reply to Can Alpay Çiftçi (canalpay) | Alıntı (acehreli): >Alıntı (canalpay): >
O zaman çok kısıtlayıcı olurdu. Diziler en azından Andrei'nin aralık (range) kavramına uymamış olurlardı. Oysa dilin temel olanakları olarak dizilerin de aralıkları desteklemeleri çok yararlı. Ben eğer dizinin uzunluğu azaltılırsa arttırıldığı gibi yine paylaşımı sonlandırır bunu eklemek gerek diye düşünnmüştüm. Örneğin okuyan kişi bak uzunluk arttırılınca paylaşım sonlandırılıyormuş ancak azaltma hakkında bir şey söylememiş acaba paylaşım sonlanır mı sonlanmaz mı diye sormasın diye dedim. Daha da kötüsü benim sizi o mesajı yazarken ki gibi yok acaba sadece arttırınca paylaşım sonlanıyor azaltınca bir şey olmuyor halen dilimi olarak kalıyor demesin diye söylemek istedim. Alıntı (acehreli): >Alıntı (canalpay): >
Makaleler bölümüne koyalım. :) Böyle deyince heyecanlandım :-) Ben sadece konu hakkında ortak fikir oluşturmak adına dedim. Eğer en azından oraya konmasa bile bir makale tarzında olacaksa array-wiseleri iyice bir inceleyerek konuşmak gerekir. Ben array-wise e diğerlerinin farklarını şöyle bir kod deneyerek inceledim:
Ve şu önermeleri savundum: Bu kod üzerinde [] kullanımın anlamı açık olsa bile ne yapacağını bilemezsek veya karıştırırsak programımızın hatasının nerede olduğunu bulunması zor bir durumda kalacağımızı söylemek istiyorum. Örneğin kodun bu satırında "dilim1[]=[66,55,55];"referans olmasını sağlıyor. Ancak kodun ilk başlarında ise tam zıttını sağlıyordu. Tasarımı belki hatasız mantıklı ayrıca kolaylaştırıcı. Ancak her durumda farklı sonuçlar çıkarması kafamızı karıştıracaktır ve programımızı hatalara sürükleyecektir. Ayrıca programımızın kodlarını değiştirdiğimizde örneğin referans olmasını sağlıyorken artık sağlamıyor olacak. Belki de tam zıttı. Ancak hep beklediğimizden farklı çalışacak. Eğer yinede kullanılmak istenilirse "dilim1[]=dilim5[]" ve "dilim1[]=dilim5" kullanımın aynı sonuçları doğurduğunu var sayarak ilk kullanımdaki gibi kullanılmasının koddaki anlamın daha rahat anlaşılmasını ve kodun daha kolay anlaşılacağını savunuyorum. Ancak asla array-wise'ye onun karmaşıklılığı yüzünden ihtiyacımız olmadığını bunu zaten foreach anlaşılabilir bir biçimde kolayca açıkça ve belki biraz uzunca kodlanabileceğini söylüyorum. Array-wise ile yapmak istediğimiz her şey foreachle yapılır. Örn andreinin kitabından:
array wish ile
aynı biçimde ne yaptığımızı daha açık bir biçimde göstererek:
array-wise ile ilgili bir uyarıda andreinin kitabında var onuda eklerim. Ayrıca şunu örnek olarak eklerim(Ali Bey'in diziler konsunun dershane problemindeki çözümü. bunu foreach ile yazıp hadi bunu array-wise ile yazın deyip çok çok güçlü bir olanak olmadığını gösteririm.(Sanırım andreinin uyarısıda bu döngüler ile ilgili idi.)):
-- |
February 03, 2011 Yeni ders: Başka Dizi Olanakları | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli (acehreli) | Alıntı: >Eğer "erişim tablosu" demek istediysen; hayır, doğru değil. :) O konuyu şimdi "eşleme tablosu" olarak düzelttim. Teşekkürler. Bende onu demek istemiştim. orada eşleme sözcüğü geçmediğinden bende eşleme diye aradığımdan dakikalarca konuyu bulamadımda :-) Doğruymuş bende kendimin neden bu hataya düştüğünü not alayımda bir daha aynı hataya düşmeyeyim.
dizi'den elemanlar silindiği halde yarısı dizisinde o elemanlar silinmedi. Bende ondan karıştırmışım. Şimdi açıklamayı buldum. Dizi göstergesindeki eleman silmek sadece elemanların bellekte boş boş oturmalarını sağlıyor. Ancak çeyreği ile yarısı dizisi ise yeni eski alanlarına erişiyor. Ben ise artık kalan dizinin uzunluğuun yarısını alacağını sandım. Yani şöyle bir çıktı bekledim: [1] -- |
February 03, 2011 Yeni ders: Başka Dizi Olanakları | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli (acehreli) | Teşekkürler :-) Bu arada rastgele mi yazılacak rasgele mi yazılacak bir kararsızlık yaşıyorsunuz sanırım. Çünkü tdk'nin sözlüğünde rasgele yokken terimler sözlüğünde var. Ancak oraya yine rastgele konulmuş. Bence doğrusu rastgele iken en kestirme yoluda "gelişigüzel" sözcüğünü kullanmak. Ancak her türlü anlaşılır zorlamamak lazım sözcükleri :-) -- |
February 03, 2011 Yeni ders: Başka Dizi Olanakları | ||||
---|---|---|---|---|
| ||||
Posted in reply to Can Alpay Çiftçi (canalpay) | Alıntı (canalpay): >Bu arada eşleme tablosuda genişletilmeli. Çok iyi fikir ama diğer tarafları tek kişinin ağzından olunca ikinci yazarın tarzı uymayabilir. Eğer eksiklikleri bilirsem kendi ağzımla yazmak isterim. Başlardaki dersleri özellikle genel bırakmaya çalışmıştım. Dizilerin iki derse ayrılmış olmasının nedeni de oydu. Aslında forumun çok daha canlı olacağını da bekliyordum. Yazıdan genel bir şeyler anlaşılmalı ve akla gelen sorular "peki şunu nasıl yaparız" diye forumda sorulmalı. Kendi öğrenme tarzıma en güzel bu yöntem uyuyor. Alıntı: >dinamik dizide kullanılacak ise kullanılan dizilerin uzunluklarının eşit olması ve sağında eşlenen dizininde eşit olması gerekir yoksa range violation hatası almamıza neden olmaz mı? Belki programcı uzunlukla uğraşıp hata yapmasın diye eklenmiyordur? O yüzden olduğunu sanmıyorum. Programcının yanlışlıkla dizi dışına taşabileceği başka işlemler de var. Örneğin dizi indekslemek. Dinamik dizilerin de uzunlukları olduğu için bence işlevsel olarak bir sorun yok. Zaten dmd'nin verdiği hata da bunun yasal olmadığını söylemiyor. Derleyici hatası gibi bir hata veriyor. Hatta bütün diziyi etkileyen bazı işlemler çalışıyor; bazıları çalışmıyor. Alıntı: >Ancak uzunluğun azaltılmasıda paylaşımı sonlandırmaz mı? O zaman çok kısıtlayıcı olurdu. Diziler en azından Andrei'nin aralık (range) kavramına uymamış olurlardı. Oysa dilin temel olanakları olarak dizilerin de aralıkları desteklemeleri çok yararlı. Burada aklımda olan kullanım, dilimin baş tarafından kısaltılarak ilerletilmesi. (Yani std.array modülünde tanımlanan popFront()'un kullanımı.) Ve uzunluğu değiştikçe bütün elemanların kopyalanmaları da yavaşlık getirirdi. Alıntı: >Bu arada array-wise hakkında düşündüklerimi paylaşacağım bir yazı yazmak istiyorum. Makaleler bölümüne koyalım. :) Ben daha önce konuştuğumuz tehlikeli durumu digitalmars.D forumunda da sordum: http://thread.gmane.org/gmane.comp.lang.d.general/48828 Tabii ki oranın en verimli kişisi olan bearophile tarafından daha önce dile getirilmiş ve hangi kullanımların yasal olmalarının mantıklı olduğu küçük tablolarda irdelenmiş: http://d.puremagic.com/issues/show_bug.cgi?id=3971 Ali -- |
February 03, 2011 Yeni ders: Başka Dizi Olanakları | ||||
---|---|---|---|---|
| ||||
Posted in reply to Can Alpay Çiftçi (canalpay) | Alıntı (canalpay): >
Tamam: böylece her türün kullanılabildiği pekiştirilmiş olur. Alıntı: >
Göstergeler dersine eklemişim. "Eşleme tablolarının in işleci" başlığı altında: http://ddili.org/ders/d/gostergeler.html Alıntı: >
Tamam; eklenebilir. Aslında dizileri anlatırken std.array'i de gözardı etmiştim. Onda da bazı yararlı olanaklar var ama onu forum sohbetlerine bırakacağım. :) Alıntı: >(eşleme tablosu doğru bir kullanım mı?) Eğer "erişim tablosu" demek istediysen; hayır, doğru değil. :) O konuyu şimdi "eşleme tablosu" olarak düzelttim. Ali -- |
February 03, 2011 Yeni ders: Başka Dizi Olanakları | ||||
---|---|---|---|---|
| ||||
Posted in reply to Can Alpay Çiftçi (canalpay) | Alıntı (canalpay): >Daha da kötüsü benim sizi o mesajı yazarken ki gibi yok acaba sadece arttırınca paylaşım sonlanıyor azaltınca bir şey olmuyor halen dilimi olarak kalıyor demesin diye söylemek istedim. O doğru işte: uzunluk arttırılınca paylaşım sonlanır ama azaltılınca sonlanmaz. Tamam, bunun böyle olduğunu daha açık ifade edeceğim.
Ali -- |
February 03, 2011 Yeni ders: Başka Dizi Olanakları | ||||
---|---|---|---|---|
| ||||
Posted in reply to Can Alpay Çiftçi (canalpay) | Alıntı (canalpay): >Dizi göstergesindeki eleman silmek sadece elemanların bellekte boş boş oturmalarını sağlıyor. Doğru. O elemanların sahibi çöp toplayıcısı. Ancak o, başka erişim sağlayan kalmadığını bildiği zaman o elemanların bellekteki yerlerini başka işler için kullanıyor. Ben o yüzden dilimlerin kendi elemanları olmadığı kavramının altını çizmeye çalışıyorum. Şunun bile kendi elemanları yok:
a, çöp toplayıcının sahip olduğu elemanlara erişim sağlayan tek dilim ama kendisi sahip değil. Ali -- |