AutoLISP: Hata kontrolü 1 (Error Handling)
![]() |
Yazar | Erhan Toker |
| Mesleği | Y. Mimar İTÜ | |
| Autodesk Yetkili Danışmanı | ||
| web | Programcı | |
AutoLISP fonksiyonlarınızda hata oluştuğunda, komut satırında kullanıcılar için anlamsız bir mesaj belirir ve programın çalışması durur. Oldukça esnek olan LISP programlama dili ne yazıkki bu konuda biraz yetersiz kalmaktadır. Bu sebeple bir yazı dizisi hazırlayarak, hata yorumlamayı anlatmaya çalışacağız. Öncelikle AutoLISP’teki hata ayıklama fonksiyonlarına bir göz atalım ( Şekil 1 ).

Figure 1
İlk yazımızda ele alacağımız fonksiyon (*error* errtxt). Bildiğiniz gibi AutoCAD komut satırından herhangi bir fonksiyonun adresini ya da tanımını öğrenmek için !func-name ifadesini kullanıyoruz. Bu ifade yardımı ile fonksiyonumuzun orijinal halini deneyelim:
Command : !*error*
#<SUBR @0cd016cc *ERROR*>
Şimdi biz bu fonksiyonu tanımlamadan önce, hata olduğunda neler oluyor bir bakalım. Bu sebeple hata oluşturmak için özel bir fonksiyon yazıyoruz ( Şekil 2 ).

Figure 2
Bu fonksiyonu çalıştırdığımızda AutoCAD bir hata verecektir.
Command: test
*Cancel*
divide by zero
Kullanıcı ve programcı için gerçekten zor bir durum. Üstelik programın işleyişi çirkin bir şekilde duruyor. Elbette kullanıcının telafi edemeyeceği hatalarda yapılacak birşey kalmamıştır; ancak en azından hata mesajı daha açıklayıcı olabilir. Böylelikle kullanıcının göndereceği hata raporları, programcı için daha anlaşılır olacaktır. Öyleyse kendi hata fonksiyonumuzu tanımlayalım ( Şekil 3 ).

Figure 3
Fonksiyonun ilk ifadesinde “Error:” kelimesi ile gerçek hata mesajı birleştirilerek yeni bir satıra yazdırılmaktadır. Yazıları birleştirmek için (strcat s1 s2 ...) fonksiyonunu kullanıyoruz. Fonksiyonumuzun ikinci ifadesinde ise AutoCAD’in orijinal ( *error* ) fonksiyonunu yerine koyuyoruz. Elbette g:olderr değişkenini önceden orijinal fonksiyonla eşleştirmiş olmamız gerekiyor. Bu işlemi hata gönderen fonksiyonda yapmamız gerekiyor. Öyleyse ( c:test ) fonksiyonumuzu hata yorumlayabilecek şekilde düzenleyelim ( Şekil 4 ).

Figure 4
Yeni eklediğimiz satırlarda ilk olarak orijinal hata fonksiyonunu global bir değişkene alıyoruz. Daha sonra orijinal hata fonksiyonunun yerine kendimizinkini koyuyoruz. Son eklediğimiz satırda ise çok önemli bir pratik var. Eğer fonksiyonumuz hata oluşmadan tamamlanırsa orijinal hata fonksiyonunu mutlaka yerine koymamız gerekiyor. Şimdi bakalım hata fonksiyonumuz nasıl çalışıyor:
Command: test
Error: divide by zero
Gördüğünüz gibi hata mesajı bizim belirlediğimiz şekilde çalışıyor. Ancak burada farkedeceğiniz gibi hatanın hangi fonksiyonda kaynaklandığı belli değil. Bunun otomatik bir çözümü yok. Ancak başka bir global değişken ile bunu çözebiliriz. Şimdi hata fonksiyonumuzu yeniden düzenleyelim ( Şekil 5 ):

Figure 5
Gördüğünüz gibi hata mesajını yazmadan önce fonksiyon isminin kayıtlı olduğu g:errfnc değişkeni ile hatanın hangi fonksiyondan kaynaklandığı yazdırılıyor. Elbette tüm fonksiyonlarımızı tanımlarken ilk işimiz fonksiyon ismimizi kaydetmek olmalı ( Şekil 6 ):

Figure 6
Yeni eklediğimiz satırın yeri önemli değil. Ancak hata oluşmadan önce olması önemli. Alışkanlık olarak hemen fonksiyon başında tanımlanması daha iyidir. Şimdi hatalı fonksiyonumuzu çalıştıralım:
Command: test
Error in function C:TEST
Error desc.:divide by zero
Böylece ( *error* ) fonksiyonunun nasıl çalıştığını detaylı bir şekilde öğrendik. Ancak burada unutmamanız gereken bir şey var: Kendi hata fonksiyonunuzu orijinalin yerine koyduktan sonra, orijinal fonksiyona geri dönene kadar her fonksiyonda sizinki geçerli olur. Dolayısı ile TEST fonksiyonundan başka fonksiyonları da çağırıyorsanız, o fonksiyonlarda sadece g:errfnc değişkenini tanımlamanız yeterlidir
Benzer Yazılar



1 February 2008, Friday 16:12
erhan bey konuyla pek alakalı değil ama sizin çizmiş olduğunuz M10 civatayla ilgili bişi isteyecektim sizden affınıza sığınırak bana bi mail atarsanız müteşekkür olacağım yardımınıza ihtiyacım war.
3 February 2008, Sunday 10:45
Çöp ve reklam mailleri firmamızdaki çalışma saatlerimizi çok etkilediğinden burada ve buraya yazan arkadaşlara mail adresimizi veremiyoruz. İsteğinizi burada açıklarsanız ve karşılayabileceğimiz birşeyse memnuniyetle yardımcı oluruz
16 April 2008, Wednesday 19:56
saygıdeger erhan toker bey,
ben autolisp öğrenmek istiyorum fakat Visual LISP editörüne bir türlü ulasamadım.nasıl açacagım visual LİSP’i bilgisayarda? Autocad prog.ramı yüklüyken baska bir programmı yüklemek gerekli editörü açabilmek için?
birde aklima matematiksel fonksiyonlar takıldı.acaba autocad programı ile bir matematik foksiyonunun grafigini çizdirebilirmiyiz? Mesela
F(x,y)=x^2+y^2-3xy^3 +5 olarak girsek foksiyonumuzu,bize bu düzlemi 3 boyutlu grafigini çizebilirmi?aydinlatıcı bilgileriniz için şimdiden çok tesekkürler,saygılarımla..
17 April 2008, Thursday 8:35
AutoCAD komut satırına VLISp yazmalısınız.