Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Test Ricası
#21
Kusura bakmayın akşam paydos ettim yazamadım, evet bende 2side hata veriyor hocam.
olayın ifthen yada ifthenex ile alakası yokki zaten, TAG 0 ise 25 sonucunu alırsınız, değilse sıfıra bölme hatası vermek zorunda değilmi?
WWW
Cevapla
#22
(08-03-2019, Saat: 08:47)esistem Adlı Kullanıcıdan Alıntı: Kusura bakmayın akşam paydos ettim yazamadım, evet bende 2side hata veriyor hocam.
olayın ifthen yada ifthenex ile alakası yokki zaten, TAG 0 ise 25 sonucunu alırsınız, değilse sıfıra bölme hatası vermek zorunda değilmi?

Sevgili arkadaşım, sanırım ben ne demek istediğimi anlatamıyorum ya da siz mesajların tümünü okumadınız. Zaten sıfıra bölme hatası almamız gerekir bunda hemfikiriz. Ancak Math unit'i içinde tanımlı olan IfThen'de bu hatayı almıyoruz bizim yazdığımız birebir aynı olan bir fonksiyonda alıyoruz. Nedenini araştırıyoruz. Siz de gözlemlemişsinizdir sanırım, bir çok arkadaşımızda farklı farklı tutumlar mevcut.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#23
Pardon hocam şimdi farkettim bende.
Bende delphi de then kısmı çalışıyor, lazarusta else kısmı çalışıyor.

bu arada her ikiside aynı çalışıyor ifthen ve ex
WWW
Cevapla
#24
(07-03-2019, Saat: 19:56)narkotik Adlı Kullanıcıdan Alıntı: IfThenEx yordamını Click eventinin üzerine aldığımda hata vermiyor. Veya bir unit açıp sizin fonksiyonu aynen oraya ekleyip sonra o uniti implement edip kullandığımdada hata almamaktayım.

10 numara ipucu olmus Idea Okuduktan sonra aynilarini ben de denedim.

Fikrim : konu derleyici optimizasyonu ile ilgili. Derleyici fonksiyonun icindeki 3. parametrenin mevcut cevirim icinde kullanilmadigini anlarsa onu degerlendirmiyor. Ha fonsiyonu ele alis seklinde fonksiyonun programin icindeki konumuna gore farkliliklar oldugundan (unitler arasi cagri veya interface kisminda deklare edilip edilmemesi veya inline olup olmamasi gbi) testdeki tutarsizlik gibi gorunen durum ortaya cikiyor.

Güzel bir zihin jimlastigi oldu Cool
Cevapla
#25
Fonksiyonda önce 3. parametreye bakıyor, eğer 3. parametre false ise direk false sonucunu döndürüyor, yok eğer 3. parametrede bir sorun yoksa if..then..else şeklinde çalışıyor.

Şöyle bir açıklama var fonksiyon detayında,
Açıklama
IfThen AValue olarak iletilen ifadeyi kontrol eder ve true olarak değerlendirirse ATrue, false olarak değerlendirirse AFalse değerini döndürür. Delphi'de AFalse parametresi belirtilmezse, AValue False olarak değerlendirildiğinde IfThen 0 veya boş bir dize döndürür.

buna istinaden dediğim gibi önce 3. parametreyi kontrol ediyor, hatalı ise direk false çalışıyor.

Fakat bende Delphi de neden düzgün çalıştı ona bir açıklama getiremiyorum Sad @cexx in dediği gibi derleyici ile alakalı bir durum sanırım.
WWW
Cevapla
#26
(08-03-2019, Saat: 11:20)esistem Adlı Kullanıcıdan Alıntı: Fonksiyonda önce 3. parametreye bakıyor, eğer 3. parametre false ise direk false sonucunu döndürüyor, yok eğer 3. parametrede bir sorun yoksa if..then..else şeklinde çalışıyor.
buna istinaden dediğim gibi önce 3. parametreyi kontrol ediyor, hatalı ise direk false çalışıyor.

Hiç bir şey anlamadim desem? Blush 

simdi fonksiyonumuz şu: IfThenEx(AValue: Boolean; const ATrue : Double; const AFalse: Double)

yani 1. parametre AValue, 2. si ATrue ve de üçüncüsü AFalse

"3. parametre false ise direk false sonucunu döndürüyor" bu duruma bir ornek verebilirmisin?
Cevapla
#27
Misal Tuğrul hocanın örneği, tag sıfırdan farklı ise mecburen sıfıra bölme hatası vericek, fakat tag sıfır olsa dahi sıfıra bölme hatasını veriyor. 25/Value yerine misal 35 yazarsanız 25/1 sonucu dönüyor, yani önce 3. parametreye bakıyor, 3. parametre hata üretiyorsa direk onu çıktı olarak veriyor, hata üretmiyorsa düzgün çalışıyor.
WWW
Cevapla
#28
(08-03-2019, Saat: 11:52)esistem Adlı Kullanıcıdan Alıntı: Misal Tuğrul hocanın örneği, tag sıfırdan farklı ise mecburen sıfıra bölme hatası vericek, fakat tag sıfır olsa dahi sıfıra bölme hatasını veriyor. 25/Value yerine misal 35 yazarsanız 25/1 sonucu dönüyor, yani önce 3. parametreye bakıyor, 3. parametre hata üretiyorsa direk onu çıktı olarak veriyor, hata üretmiyorsa düzgün çalışıyor.

ilginc bir fonksiyon yazmislar, kullanirken bayagi dikkatli olmali... Teşekkurler aciklama icin.
Cevapla
#29
Dün akşam denediğimde Implement Click eventinin altında yapılınca, fonksiyonun içerisine hiç girmiyor direk hata dönüyor sorun orada aranmalı bence
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla
#30
Başlı başına garip durumlar söz konusu zaten. Normalde, bir metod çağrımına geçilen parametrelerin stack'a itilmesi gerekeceği için; parametreler önceden değerlendirilir ve division by zero hatası alınması da son derece normal olur. Lâkin, Math.pas içinde tanımlı olan bahse konu metod için bu durum gerçekleşmiyor. Hadi diyelim ki, const olduğu için parametre değeri kontrol edilmeden adresi geçiliyor olsun, bu durumda bizim metodumuzun da hata vermemesi gerekirdi.

 Ayrıca, zaten implementation bloğunun üstünde tanımı bulunan bir metodun, implementation'un altında nerede tanımlandığının da bir önemi olmamalı. Ama görünen o ki, onun da bir önemi var. Dediğim gibi bir değil, birden fazla gariplik söz konusu.

Bu durumda, IfThen metodunun kullanımı son derece riskli, kullanmamanızı öneriyorum.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla




Konuyu Okuyanlar: 1 Ziyaretçi