Delphi Can

Orjinalini görmek için tıklayınız: Birden çok şartın sağlanması
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Sayfalar: 1 2
Merhaba, yaptığım projelerde bu aralar en çok ihtiyaç duyduğum şeylerden biride , birden çok şartı kontrol etmek ve çıkan sonuca göre boolean değer döndüren prosedür veya fonksiyon hazırlamak..

Örnek olarak bir listbox prosedür veya fonksiyonla denetliyoruz diyelim. 
1) Listbox boşmu.
2) Listoboxta herhangi bir satır seçilimi
3) Seçili olan listboxtaki son üyemi.
4) Listboxtaki sayımı , yazımı.
 
Yukarıdaki seçeneklerin hepsinin true  olduğunu, birkaç iF AND OR kullanarak bulabilir ve fonksiyonumuzun sonucuna true diyebiliriz.
Fakat içlerinden bir veya bir kaçının false olması durumunda işler biraz karışıyor Smile) Birden çok kombinasyon çıktığı için if else yapısıda kendi içinde aynı kombinasyonda çoğalıyor ve if else içinde boğulup gidiyorum. Aynı şey case of yapısında da geçerli.
Peki böyle bir durumda şu sonucu istiyorsak Ne yapmalıyız , doğru yaklaşım nedir, nasıl yapmalıyız...

İstenen sonuç : 
1) Eğer şartların hepsi sağlanmışsa true değer döndür. 
2) Şartlar sağlanmamış ise false döndür ve sebebini belirt. (örneğin listbox boş de)

Bende çıkan sonuc ve hatama göre ,hatamı düzeltecek kodu tekrar çağırayım

Teşekkürler.
Merhaba,

"şartların hepsi doğru mu" kısmını anlayamadım maalesef. Ama eğer fonksiyonda cevap olarak TRUE/FALSE yanında açıklama/hata vb. bilgileride dönmek istiyorsanız OUT parametresini kullanabilirsiniz.

Örnek Kullanım :

Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.

Routine name(... Out OutputVarName : type; ...)
Varsayılan olarak en üste result := '' ; şeklinde string dönüş verseniz olacak gibi.

şartları alt alta if bloklarıyla belirtir, hiç ELSE kullanmadan sorgularsınız. 

THEN 'lerine de result := result + #13 +' şu şu problem var'; dersiniz. 

fonksiyonu değerlendirdiğiniz yerde ise dönen string değer '' şeklinde boş ise sorun yok, dolu ise bir bir veya tüm string dönen ifadeyi mesajla bildirirsiniz. 

En kısa yol bu.
(21-03-2018, Saat: 02:54)Lord_Ares Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Merhaba, yaptığım projelerde bu aralar en çok ihtiyaç duyduğum şeylerden biride , birden çok şartı kontrol etmek ve çıkan sonuca göre boolean değer döndüren prosedür veya fonksiyon hazırlamak..

Örnek olarak bir listbox prosedür veya fonksiyonla denetliyoruz diyelim. 
1) Listbox boşmu.
2) Listoboxta herhangi bir satır seçilimi
3) Seçili olan listboxtaki son üyemi.
4) Listboxtaki sayımı , yazımı.
 
Yukarıdaki seçeneklerin hepsinin true  olduğunu, birkaç iF AND OR kullanarak bulabilir ve fonksiyonumuzun sonucuna true diyebiliriz.
Fakat içlerinden bir veya bir kaçının false olması durumunda işler biraz karışıyor Smile) Birden çok kombinasyon çıktığı için if else yapısıda kendi içinde aynı kombinasyonda çoğalıyor ve if else içinde boğulup gidiyorum. Aynı şey case of yapısında da geçerli.
Peki böyle bir durumda şu sonucu istiyorsak Ne yapmalıyız , doğru yaklaşım nedir, nasıl yapmalıyız...

İstenen sonuç : 
1) Eğer şartların hepsi sağlanmışsa true değer döndür. 
2) Şartlar sağlanmamış ise false döndür ve sebebini belirt. (örneğin listbox boş de)

Bende çıkan sonuc ve hatama göre ,hatamı düzeltecek kodu tekrar çağırayım

Teşekkürler.

var
  ASuccess  : Boolean;
 ADummy    : Integer;
begin
 ASuccess := (ListBox1.Count > 0) and (ListBox1.ItemIndex <> -1) and (ListBox1.ItemIndex = ListBox1.Count) and (TryStrToInt(ListBox1.Items[ListBox1.ItemIndex], ADummy));
end;
En temiz açıklama muharrem beyden gelmiş, bende sürekli o şekilde kullanırım. Örnek vermek gerekirse;
var
devam : String;
begin
devam := '' ;
if olumsuz şart then devam := 'şu eksik';
if diger olumsuz şart then devam := devam+#13+'şu da eksik';
.....

if (devam='') then işlemler else showmessage (devam);



gibi.
(21-03-2018, Saat: 08:35)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(21-03-2018, Saat: 02:54)Lord_Ares Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Merhaba, yaptığım projelerde bu aralar en çok ihtiyaç duyduğum şeylerden biride , birden çok şartı kontrol etmek ve çıkan sonuca göre boolean değer döndüren prosedür veya fonksiyon hazırlamak..

Örnek olarak bir listbox prosedür veya fonksiyonla denetliyoruz diyelim. 
1) Listbox boşmu.
2) Listoboxta herhangi bir satır seçilimi
3) Seçili olan listboxtaki son üyemi.
4) Listboxtaki sayımı , yazımı.
 
Yukarıdaki seçeneklerin hepsinin true  olduğunu, birkaç iF AND OR kullanarak bulabilir ve fonksiyonumuzun sonucuna true diyebiliriz.
Fakat içlerinden bir veya bir kaçının false olması durumunda işler biraz karışıyor Smile) Birden çok kombinasyon çıktığı için if else yapısıda kendi içinde aynı kombinasyonda çoğalıyor ve if else içinde boğulup gidiyorum. Aynı şey case of yapısında da geçerli.
Peki böyle bir durumda şu sonucu istiyorsak Ne yapmalıyız , doğru yaklaşım nedir, nasıl yapmalıyız...

İstenen sonuç : 
1) Eğer şartların hepsi sağlanmışsa true değer döndür. 
2) Şartlar sağlanmamış ise false döndür ve sebebini belirt. (örneğin listbox boş de)

Bende çıkan sonuc ve hatama göre ,hatamı düzeltecek kodu tekrar çağırayım

Teşekkürler.

var
  ASuccess  : Boolean;
 ADummy    : Integer;
begin
 ASuccess := (ListBox1.Count > 0) and (ListBox1.ItemIndex <> -1) and (ListBox1.ItemIndex = ListBox1.Count) and (TryStrToInt(ListBox1.Items[ListBox1.ItemIndex], ADummy));
end;

Benim oyum bu kullanımdan yana genelde bende böyle kullanırım
Ama soruyu soran arkadaş, sonuç False ise sebebini de bilmek istiyor.
(21-03-2018, Saat: 09:47)SimaWB Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Ama soruyu soran arkadaş, sonuç False ise sebebini de bilmek istiyor.

Result'ı Boolean değil, Integer dönüp, başarılı ise 0, başarısız ise her bir koşul için 1, 2, 3 şeklinde bir dönüş mümkün. Ya da birden fazla hata varsa hataların hepsini belirtsin deniyorsa
1: Hata 1
2: Hata 2
4: Hata 3
8: Hata 4
Hata 1, Hata 2, Hata 4 var ise 1 + 2 + 8 = 11 deyip, 11 ile istediğiniz kodu and'leyerek hangi hataların olduğunu kontrol edilebilir. 

Ya da daha temizi, hata durumunda array ya da objetlist şeklinde bir hata objesi dönüp, hata yoksa bu array ya da object list boş dönülür, hata varsa bütün hatalar bu array ya da object list için dönülür  Blush

Çözüm çok, hangisi işinize gelirse  Angel
Benim yöntemimde genelde Record array şeklinde oluyor.
Ben benzer bir durum için Kontrol ederek Tstringliste ekliyorum, sonuçta size boş ise hata yok devam, var ise textini hata olarak fırlatıyorum.
Sayfalar: 1 2