Delphi aşağıdaki modeli kullanabilirsiniz: I (derleme değil) Aşağıdaki gibi bir kod istiyorum try...finally
(veya tam tersi) içinde, hangi dili kullandığınızdan bağımsız olarak, asıl sorunun, hata kaygılarını karıştırdığına işaret etmek istediğim soruya doğrudan yanıt verilir. taşıma ve kaynak yönetimi. Try...except
ve try...finally
çirkin. Sizi kodunuzun yaptığı şeyden uzaklaştırıyorlar. Daha iyi bir yaklaşım, ayrı bir yöntem haline hata işleme ayıklamak için geçerli:
procedure Read(Connection: TDBConnection);
begin
try
//Read DB
except
//Handle Exception
end;
end;
procedure ReadRecord;
begin
DBConnection.Open;
Read(DBConnection);
DBConnection.Close;
end;
Şimdi hata işleme kendine yeten ve sen mutlu yoluna dikkatinizi konsantre böylece göz ardı edilebilir.
Bekleyin! open
ve close
nedir? Ne istisnalar artırırlarsa?
Basit. Bu işlemleri deneyin ... işlevler dışında sarın ve bunları da ele alın. Gerekli olmamalı. Kullandığınız DB kitaplığı bir istisna değerse open
veya close
bağlantıyı bilinmeyen bir durumda bırakmaz. Sonra tekrar beklemediğiniz şeyler için istisnalar var.
Aynı teknik, herhangi bir kaynakla kullanılabilir: nesne oluşturma, dosya erişimi, vb. İşlevinizin gövdesinin bir istisna yükseltmeyeceği garanti edildiğinde try...finally
gereksizdir.
Elbette, işlev çağrısı genel yükü vardır, ancak çoğu durumda önemsizdir ve hata işleme işlevleriniz, derleyicinin bunları satır içine almasına izin verecek kadar küçük olmalıdır.
Çünkü 'nihayet' ve 'hariç' semantik olarak tamamen farklı, Delphi'de aynı ifadede olamazlar. Sadece 'nihayet' ve 'hariç' kullanılan RTL/VCL kaynaklarına bakın (ve bunların oranı). Yakında bulundukları yerleri pek göremezsiniz. –
"İşlemi gerçekleştir" işlemini "son" satırına koymayın. Bir istisna oluşursa, herhangi bir şey yapmak istemezsiniz. Özellikle önceki "except" bloğunda geri aldığınız bir işlemi yapmayı denemek istemezsiniz. Commit, 'try' bölümünde son eylem olmalıdır. –