Konuyu Oyla:
  • Derecelendirme: 4/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Free vs FreeAndNil
#28
Alınganlık göstermiyorum Bahadır bey. Ben iddia ettiğim hususu nedenleri ile izah etmeye çalıştım; bunun aksini iddia eden arkadaşlarımın da aynı yolu izlemesi icap eder idi. Belki benim hatalı bildiğim bir husus vardır. Ancak, bu şekilde bir yaklaşım sergilenmediği halde, hâla sabit bir fikir üzerinde ısrar edilmesine ve bu fikrin puanlar vasıtası ile takdir görmesine; ancak bu düşünceyi izleyenlerin neden izlediklerini madde madde ve ikna edici olarak paylaşmamalarına sinirlendim kısacası ben.

 Burası ortak bir platform. Bizlerin tartışmaları insanları yanlışa sürükler ise ben bundan üzüntü duyarım. Siz ve sizin gibi tecrübeli ve kıymetli arkadaşlarımın neden hata'da ısrar ettiğinizi anlamlandıramadım cidden.

Konunun basit bir konu olmasından dolayı çok detaylandırmak istememiştim ancak eğer illa da istiyoruz derseniz; vakit ayırmaya çalışıp, sizlere Free'nin bir dünya sakıncalı kullanımına örnekler bulup verebilirim. Özellikle ayrılmış hafıza bölgelerinin metodlar, nesneler, thread'ler arasında paylaşıldığı senaryolarda.

 Kendimden ve anlatım kaabiliyetimden şüphe ettirdiniz bana gerçekten de. Ki bir çok insan, bu konuda biraz da olsa yeteneğim olduğundan bahis eder. Tekrar ifade etmek gerekir ise; söylemlerinizden (siz ve arkadaşlarımın) alınmadım, ama bu kadar basit bir konuda neden ihtilafa düştüğümüzü anlayamadığım için sinirlendim açıkçası.

 FreeAndNil yerine Free kullanırsanız ve programcının hatasından dolayı daha önce boşaltılmış olan nesneye erişimde bulunur iseniz; bu durumda kullanıcının karşısına:

"Access violation at adress ... ıvır zıvır"

gibi bir mesaj çıkacaktır. Ardından kullanıcı, firmaya bir şekilde ulaşacak ve:

Kullanıcı(K), Programcı(P)

K: Abi, programda hata çıktı. Doğru düzgün çalışmıyor, sürekli hata veriyor bu program.
P: Sakin olun, ben size yardımcı olmaya çalışacağım. Ne hatası çıktı, hata mesajında ne yazıyordu ?
K: Bilmiyorum abi, kapattım ekranı.
P: Hımm. Peki ne yaparken çıktı bu hata ?
K: Abi bilmiyorum zırt pırt çıkıyor.
P: Size nasıl yardımcı olmamı bekliyorsunuz !!

gibi dialoglar baş gösterecektir. Bunlar yaşanmış mıdır, evet yaşanmıştır.

Peki uygulamanız da Free yerine FreeAndNil kullanmış olsaydınız ve ilgili nesneye erişim yaptığınız yerde de Assigned ile nesnenin var olup olmadığını kontrol etseydiniz bu durumda ne olacaktı ?

K: Abi bu program yapması gerekeni yapmıyor ?
P: Anlamadım, neyi yapmıyor.
K: Fatura basmıyor !
P: Anladım, çok teşekkür ederim. Hemen ilgileniyorum.

Programcı fatura basılması ile ilgili kod bloğuna gider. Assigned kontrolünü görür, ilgili nesnenin geçerli olmadığını(nil) anlar. Nesnenin nerede FreeAndNil edildiğini araştırır ve sorunu tespit eder.

Programınız kontrol edilmemiş hata mesajları ile karşılaşmaz ve uygulamanızın, firmanızın ve sizin itibarınıza da gölge düşmez.

Bu sadece çok basit bir örneği idi verebileceklerimin. Bir de çok kanallı uygulamalarda ayrılan hafızanın ayıran tarafından serbest bırakılmadığı durumlara örnekler var ki, orada karşılaşılabilecek sorunları tespit edebilmek dahi inanılmaz zor olur.

Bir kod bloğu hatalı çalışacak ise; hiç çalışmaması daha evladır. Çalışmayan kod çok rahat tespit edilebilir, ancak zaman zaman hata alabileceğiniz bir kodu nasıl tespit edeceksiniz ?

Verdiğim örneklerden de görebileceğiniz gibi; nil olan bir instance pointer'ı üzerinden dahi metod çağrımlarında bulunabiliyorsunuz. Ayrıca, hafızanın 0xABCFF10 adresini işaret eden A nesnesi Free edildikten sonra, aynı hafıza adresine bir B nesnesi yerleşebilir. Bu durumda A instance pointer'ı üzerinden yapılacak çağrımlar(A pointer'ı nil'e eşitlenmediği için), B nesnesinin metodlarını çağırabilecektir.

Olabilir mi böyle bir şey ? Evet kesinlikle olabilir. O halde neden böyle bir kapıyı açık bırakalım ? Programlar, programcı adı verilen insan'lar tarafından yazılırlar. Ve insanların fıtratı gereği; insanlar hata yapar, beşerdir şaşar. Benim dediğim şey, mümkün mertebe bu hataları engellemeye çalışmak, hatalı kodların çalışmasına mani olmak. Ben bir nesne instance'ını hatalı bir şekilde FreeAndNil yapmamam gereken yerde boşalttı isem bile; Assigned kontrollerini koyduğum için asla öngörülemeyen durumlar ile karşılaşmam. Data'lara zarar vermem, program olmaması gereken istikamette akmaz. Bunun aksi durumlara binlerce örnek verilebilir.

 Instance pointer'ının anlamsız bir yeri göstermesinden mütevellit oluşacak bir hata, bir thread'in prematüre şekilde sonlanmasına neden olur ve çok büyük olasılıkla hatayı dahi göremezsiniz. (AcquireExceptionObject kullanmadı iseniz). Siz zannedersiniz ki thread'iniz sürekli çalışıyor, ama o thread artık yaşamıyor bile.

Programcı'nın bir disipline sahip olması gerektiğine inanırım. Bunun elbette mantıklı ve sayfalar dolusu yazılabilecek nedenleri var. İnsanlar tembelliklerini bir şeylerin ardına gizlememeli.

En mukaddes bilgi, insanın kendisini bilmesidir.

Bir instance pointer'ı nil'e eşitlemeyen arkadaşların, lokal pointer değişkenlerini neden ilk değerleri ile kullanmadığını, lokal sınıf değişkenlerini neden ilgili sınıfı Create etmeden kullanmadıklarını bilmek isterim ? Cevapları duyuyorum ama, yine de bilmek isterim !

Kimsenin şahsına bir kızgınlığım asla söz konusu değil, benim kızdığım nokta, bu denli berrak bir suda; nasıl olur da aynı balığa birimiz hamsi diğerimiz lüfer der ? Ayrıca, kim neye inanmak istiyor ise elbette inanabilir; beni ilgilendirmez de. Tek derdim, doğru bilinen yanlışları düzeltmeye çalışmak. Belki de ben yanlışımdır kim bilir, bunu da bilmek ve kendimi düzeltmek isterim. Her zaman ve herkesten bir şeyler öğrenebilirim.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla


Bu Konudaki Yorumlar
Free vs FreeAndNil - Yazar: edo - 11-10-2016, Saat: 09:18
Cvp: Free vs FreeAndNil - Yazar: Tuğrul HELVACI - 11-10-2016, Saat: 10:08
Cvp: Free vs FreeAndNil - Yazar: edo - 11-10-2016, Saat: 10:18
Cvp: Free vs FreeAndNil - Yazar: Tuğrul HELVACI - 11-10-2016, Saat: 10:20
Cvp: Free vs FreeAndNil - Yazar: edo - 11-10-2016, Saat: 10:25
Cvp: Free vs FreeAndNil - Yazar: Tuğrul HELVACI - 11-10-2016, Saat: 10:53
Cvp: Free vs FreeAndNil - Yazar: kimimben - 11-10-2016, Saat: 11:50
Cvp: Free vs FreeAndNil - Yazar: masteryoda - 11-10-2016, Saat: 14:34
Cvp: Free vs FreeAndNil - Yazar: Fesih ARSLAN - 11-10-2016, Saat: 10:25
Free vs FreeAndNil - Yazar: SimaWB - 20-10-2016, Saat: 11:56
Free vs FreeAndNil - Yazar: sadettinpolat - 31-01-2018, Saat: 20:56
Free vs FreeAndNil - Yazar: Bahadir.Alkac - 01-02-2018, Saat: 09:52
Cvp: Free vs FreeAndNil - Yazar: Tuğrul HELVACI - 01-02-2018, Saat: 12:43
Cvp: Free vs FreeAndNil - Yazar: Tuğrul HELVACI - 01-02-2018, Saat: 13:01
Cvp: Free vs FreeAndNil - Yazar: edo - 01-02-2018, Saat: 16:22
Free vs FreeAndNil - Yazar: klavye - 01-02-2018, Saat: 16:05
Cvp: Free vs FreeAndNil - Yazar: Tuğrul HELVACI - 01-02-2018, Saat: 16:33
Cvp: Free vs FreeAndNil - Yazar: sadettinpolat - 01-02-2018, Saat: 20:41
Cvp: Free vs FreeAndNil - Yazar: Tuğrul HELVACI - 02-02-2018, Saat: 11:42
Cvp: Free vs FreeAndNil - Yazar: Bahadir.Alkac - 02-02-2018, Saat: 12:18
Cvp: Free vs FreeAndNil - Yazar: Tuğrul HELVACI - 02-02-2018, Saat: 12:34
Cvp: Free vs FreeAndNil - Yazar: Bahadir.Alkac - 02-02-2018, Saat: 12:54
Free vs FreeAndNil - Yazar: esistem - 02-02-2018, Saat: 12:11
Cvp: Free vs FreeAndNil - Yazar: Fesih ARSLAN - 02-02-2018, Saat: 12:18
Cvp: Free vs FreeAndNil - Yazar: savasabd - 02-02-2018, Saat: 12:58
Cvp: Free vs FreeAndNil - Yazar: ismailkocacan - 02-02-2018, Saat: 16:04
Free vs FreeAndNil - Yazar: edo - 02-02-2018, Saat: 14:20
Cvp: Free vs FreeAndNil - Yazar: Tuğrul HELVACI - 02-02-2018, Saat: 17:24
Free vs FreeAndNil - Yazar: Bahadir.Alkac - 02-02-2018, Saat: 18:23
Cvp: Free vs FreeAndNil - Yazar: sadettinpolat - 03-02-2018, Saat: 16:52
Cvp: Free vs FreeAndNil - Yazar: Tuğrul HELVACI - 05-02-2018, Saat: 10:33
Free vs FreeAndNil - Yazar: canbir - 26-05-2018, Saat: 18:57
Cvp: Free vs FreeAndNil - Yazar: edo - 28-05-2018, Saat: 10:55
Free vs FreeAndNil - Yazar: Halil Han BADEM - 26-05-2018, Saat: 23:44
Free vs FreeAndNil - Yazar: sadettinpolat - 27-05-2018, Saat: 01:38
Cvp: Free vs FreeAndNil - Yazar: Halil Han BADEM - 27-05-2018, Saat: 01:46

Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Free vs FreeAndNil vs DisposeOf yanniosman 6 3.855 08-01-2024, Saat: 11:50
Son Yorum: RAD Coder
  Delphi Community Edition free info@guzelceker.com 1 2.452 29-06-2020, Saat: 11:13
Son Yorum: Fesih ARSLAN
  Boş yere free etmeye uğraştığımı düşünüyorum. bibilen 11 8.494 02-05-2020, Saat: 11:18
Son Yorum: bibilen
  Datasnap free yapmama sorunu. seci20 1 2.238 24-10-2019, Saat: 08:16
Son Yorum: 3ddark
  Nesne Neden Free Olmuyor? Halil Han BADEM 3 3.575 31-07-2019, Saat: 14:28
Son Yorum: sddk



Konuyu Okuyanlar: 1 Ziyaretçi