|
AutoCAD... AutoLISP... VisualLISP... |
|
[5] getINT i getREAL |
|
Podstawowym warunkiem poprawnego działania każdego programu, jest odpowiednie wprowadzenie danych wejściowych. Szczególnie ma to znaczenie w sytuacjach gdy dane pobierane są od użytkownika. Domniemanie że dane zostaną podane poprawnie (a tym samym że program będzie działał), opiera się na zbyt kruchym fundamencie. Jest też jednym z najczęściej spotykanych błędów w programach lisp-owych.
Odpowiednie filtrowanie i sprawdzenie danych pobieranych od użytkownika zmniejsza ryzyko wystąpienia błędów, a można osiągnąć to w stosunkowo prosty sposób. Na początek pobranie danych w postaci liczby całkowitej albo rzeczywistej.
Poniżej przykładowa funkcja zapewniająca pobranie takich danych z określonego zakresu.
|
; Funkcja oczekuje od użytkownika podania liczby INT / REAL z określonego zakresu. ; (jk:GET_Numb [Tp Msg Init Mini Maxi]) ; Argumenty: ; Tp [STR] - określenie typu liczby: "R" dla liczby rzeczywistej, "I" dla całkowitej ; Msg [STR] - zgłoszenie ; Init [INT] - liczba całkowita zakodowana bitowo - tak jak dla initget czyli: ; 0 - uniemożliwia podanie odpowiedzi pustej (ENTER) ; 2 - uniemożliwia podania liczby zero ; 4 - uniemożliwia podania liczby ujemnej ; Mini [INT,REAL] - liczba określająca minimalną dopuszczalną liczbę ; Maxi [INT,REAL] - liczba określająca maksymalną dopuszczalną liczbę (defun jk:GET_Numb (Tp Msg Init Mini Maxi / Res ts) (if (member (setq ts (strcase Tp))(list "R" "I") ) (progn (initget Init) (if (setq Res (if (= "R" Ts) (getreal Msg) (getint Msg) ) ) (cond ( (< Res Mini) (princ "Podana liczba jest za mała. ") (jk:GET_Numb Tp Msg Init Mini Maxi) ) ( (> Res Maxi) (princ "Podana liczba jest za duża. ") (jk:GET_Numb Tp Msg Init Mini Maxi) ) (T Res) ) Nil ) ) Nil ) ) |
|
|
|
|