Jump to page: 1 2
Thread overview
assert kontrol ifadesi hazırlama
May 18, 2012
zafer
May 18, 2012
zafer
May 19, 2012
Salih Dinçer
May 19, 2012
Salih Dinçer
May 20, 2012
Salih Dinçer
May 20, 2012
Salih Dinçer
May 20, 2012
zafer
May 21, 2012
Salih Dinçer
May 21, 2012
zafer
May 21, 2012
Salih Dinçer
May 21, 2012
zafer
May 22, 2012
Salih Dinçer
May 22, 2012
zafer
May 18, 2012
import std.stdio;
import std.functional;

void main()
{
	writefln("uint.max : %s", uint.max);

	writefln("Toplam : %s", Topla(1, 2_147_483_647));
}

int Topla(int sayi1, int sayi2)
{
	// 1 - assert(sayi1 + sayi2 < int.max, "Sayıların toplamı int sınırını aşıyor.");

	// 2 - assert(sayi1 + sayi2 > 0, "Sayıların toplamı int sınırını aşıyor.");

	assert(sayi1 + sayi2 >= 1, "Sayıların toplamı int sınırını aşıyor.");

	return sayi1 + sayi2;
}

Yukarıdaki kodda amacım assert kullanımını örneklemek için Topla() metodu içinde int sınırını aşan bir toplam elde etmek ve bunu assert kullanarak yakalamaktı. Ancak işler umduğum gibi gitmedi.

  1. olarak işaretledğim satırda toplam değeri sınırı aşınca eksi değer aldığı için kontrol deyimi TRUE sonucunu üretti ve assert işleme izin verdi.

  2. assert deyiminde ise daha farklı bir durum var. Sonuç eksi bir değer olmasına rağmen assert sesini çıkarmadı.

Son assert deyimi çalıştı ancak o da Topla(0, 0); gibi bir çağrı için hata üretiyor. Oysa bu çağrı ne kadar anlamsız olsada kurallara uygun ve işletilebilir bir çağrı.

Dolayısıyla öncelikle sorunum bunlar diğer taraftan assert kullanımı ile ilgili etkileyici örneklerle karşılaştıysanız yada aklınıza böyle örnekler geliyorsa paylaşırsanız çok sevinirim. Sunum için bir şeyler hazırlamaya çalışıyorum.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 19, 2012

Teşekkürler Ali. Bu assert kontrol ifadeleride başlı başına bir iş gibi görünüyor. Çünkü ifade yanlış kurulursa bu sefer geçmesi gereken işlemide engelleyebiliyor.

Bu arada "2. assert deyiminde ise daha farklı bir durum var. Sonuç eksi bir değer olmasına rağmen assert sesini çıkarmadı." hakıında benim göremeyip senin gördüğün bir durum var mı?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 18, 2012

Yanılmıyorsam taşma olmadığı zaman toplam her iki sayıya da eşit veya daha büyüktür:

   assert((sonuç >= sayi1) && (sonuç >= sayi2),
          "Sayıların toplamı int sınırını aşıyor.");

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 19, 2012

Benim yanıt pek genel değilmiş. Araştırınca şu konuda bazı bağlantılar buldum:

http://stackoverflow.com/questions/199333/best-way-to-detect-integer-overflow-in-c-c

Oradaki pdf'in içinde gcc'nin kaynak kodlarında geçtiği söylenen şöyle bir çözüm var:

Wtype __addvsi3 (Wtype a, Wtype b) {
 const Wtype w = a + b;

 if (b >= 0 ? w < a : w > a)
   abort ();

 return w;
}

Şu sayfada da bütün aritmetik işlemler için çözümler var ("compliant" denenler taşmaları sezen kodlar):

https://www.securecoding.cert.org/confluence/display/seccode/INT32-C.+Ensure+that+operations+on+signed+integers+do+not+result+in+overflow?showComments=false

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 20, 2012

Ben de dün konuşmaya hazırlanmak için şöyle notlar hazırlamıştım ama meğer bilmediğim hala çok şey varmış:

Alıntı:

>

D DİZİLERİ.rtf
Deneme ve Bir Hazırlık

Merhaba,

Bir çok dilin olmazsa olmazı diziler (arrays), kendi içlerinde çok çeşitli olduğu kadar her ortamda (ve script'lerde) farklı şekilde tanımlanırlar. Çoğu zaman ortamlar arasında geçiş yapıldığında bir yerlere (reference notes) bakma gereği duyarım, ancak D'de buna ihtiyaç duymam! Bunun sebeplerine ve ayrıntılarına geçmeden önce, hepsinde (çoğunlukla) ortak noktanın köşeli parantezler [..] olduğunu belirtmeden geçemeyeceğim...:)

D'de üç şekilde dizi tanımlayabiliriz; bunlar:

1-İşaretçi Dizisi
2-Değişken Dizisi
3-Eşleme Dizisi

Ancak ayrıntılara (dynamic, matrix) geçmeden evvel C'den günümüze (D'ye) nasıl dizi oluşturduğumuzu hızlı bir şekilde geçelim. Çok ayrıntısına girmeden bütün bir şekilde (tümden varım) açıklayacağım.

C'de şöyle yapardık:

' <veri türü> ismi[boyutu] = {'v', 'e', 'r', 'i', 'l', 'e', 'r' };'

D'de ise hem yukarıdakine benzer:

' <veri türü> ismi[boyutu] = ["ve", "ri", "ler"];'

Hem de en (D)oğal anlamıyla şöyle yaparız:

' <veri türü>[boyutu] ismi = ["ve", "ri", "ler"];'

(D)oğal ifadesini bilinçli yazdım! Bir dizi demek 'veri türü'nün çoğulu demektir ki biz bunu köşeli parantezler [..] ile yaparız. Yani gidip bunu 'veri ismi'nin sağına değil de soluna (türün yanına) yazmak daha doğal.

Zaten biz dizilerin elemanlarına erişeceğimiz zaman diğer şekilde kullanmaktayız. Aynı şekilde güzel parantez {..} kullanmak da anlamsız. Öyle ya, diziler ile her işimizi köşeliler ile halledeceğiz ki dört köşe olalım...:)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 20, 2012

Aslında Digital Mars'ın belgelerinden faydalandım. Array'i anlatırken üçe bölmüşler ve aralarda concating gibi mevzuları işlemişler ki bir nevi dilime girilmiş.

Dilim mevzusunu dinamik dizi ile karışmasını engellemek için farklı bir şekilde ele almayı düşünüyorum. Ama en son notlarımı toparlayınca e-posta ile gönderip üzerinden geçmeni rica edeceğim.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 20, 2012

Bilmem katılır mısın; dilimleri işaretçi dizisi içinde işlemeyi düşünüyorum?

Çünkü onlar dinamik dizilerden biraz farklılar. Yani bir bellek bölgesini işaret ediyorlar. Dinamik diziler ise GC'nin kontrolünde 2. madde içinde işlenebilir.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 20, 2012

Pardon, işaretçi mi demişim! Kim demiş, neden demiş, niçin, nasıl... :-D

Alışkanlık işte...:)

Evet, gösterge ve tüm nimetleri D'nin özel bir olanağı değil. Ancak bağlantı kurmak için diğer dillerde olmayan (öyle değil mi?) dilimleri ifade edebileceğim, daha doğrusu devam edebileceğim önemli bir başlık. Gerçi diziyi anlatmadan dilime geçilmez ama bir yolunu bulurum. Kaldı ki dizileri bilmeyen yoktur herhalde...

İşte 'D Nedir'i anlatmak Ali hocamın işi olsa gerek. Bunun da en yakıştığı yer açılış konuşması...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 20, 2012

Alıntı (Salih Dinçer):

>

D'de üç şekilde dizi tanımlayabiliriz; bunlar:

1-İşaretçi Dizisi
2-Değişken Dizisi
3-Eşleme Dizisi

1 ile 2 farklı mı? Ben aşağıdaki gibi anlamayı daha kolay buluyorum:

  • Sabit uzunluklu dizi
  • Dilim

Bence bu ayrım önemli çünkü:

  • birisi değer türü, diğeri referans türü
  • birisinin uzunluğu değişemiyor, diğerininki değişebiliyor
  • birisinde yalnızca elemanlar var (C ve C++ dizileri gibi), diğeri ise elemanlardan kopuk olarak bir uzunluk ve işaretçiden oluşuyor

Eşleme dizisi ise ancak veri depolama olduğu için diğerleriyle aynı sıraya koyulmalı çünkü aslında array değil, hash table.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 20, 2012

Anladım. Sanırım şuradaki sıralamadan bahsediyorsun:

http://dlang.org/arrays.html

Senin "İşaretçi dizisi" yazdığını görünce içinde işaretçiler bulunan dizi anlamıştım. Sen ise galiba tek işaretçinin dizi gibi kullanılmasını söylüyorsun.

Ayrıca haklısın (ve haklılar): Diziler ve eşleme tabloları da "indeks ile erişim" anlamında aynılar.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

« First   ‹ Prev
1 2