확인
견고한 플러그인을 만들 때는 함수가 오용이나 예상치 못한 입력이 있어도 오류를 우아하게 처리하고 기대대로 동작하는지 확인하는 것이 중요합니다. 유효성 검사는 기능의 무결성을 보호하고 충돌이나 의도하지 않은 동작을 방지하는 데 도움이 됩니다.
입력을 올바르게 처리하는지 확인하기 위해 유효성 검사를 추가하여 send-message 함수를 개선할 수 있는 방법을 살펴보겠습니다.
입력 유효성 검사
메시지를 보내기 전에 send-message 함수에 전달된 output 인수가 유효한지 확인해야 합니다. 출력 대상이 예상 값(gui, 오류 콘솔 또는 터미널) 중 하나인지 확인하는 검사를 추가할 수 있습니다.
Example:
(define (send-message message output)
;; 출력 인수 검증
(if (not (member output '(gui error-console terminal)))
(error "Invalid output destination: " output)
(cond
;; 메시지 콘솔로 보내기
((eq? output 'error-console)
(lumi-message-set-handler 2)
(lumi-message message))
;; GUI 대화 상자로 보내기
((eq? output 'gui)
(lumi-message-set-handler 0)
(lumi-message message))
;; 터미널 창으로 보내기
((eq? output 'terminal)
(display message))))
;; 기본 메시지 핸들러를 메시지 콘솔로 복원
(lumi-message-set-handler 2))이 예에서는 member을 사용하여 output 인수가 유효한지 확인합니다. 그렇지 않은 경우 함수는 명확한 메시지와 함께 오류를 발생시켜 잘못된 값이 문제를 일으키는 것을 방지합니다.
빈 메시지 처리
message 인수가 유효한지 확인하는 것도 유용합니다. 예를 들어 빈 문자열이나 #f(false)가 메시지로 전달되면 함수는 이를 적절하게 처리해야 합니다.
빈 메시지 처리 예:
(define (send-message message output)
;; 메시지가 비어 있는지 확인
(if (or (not message) (string=? message ""))
(error "Message cannot be empty")
(cond
((eq? output 'error-console)
(lumi-message-set-handler 2)
(lumi-message message))
((eq? output 'gui)
(lumi-message-set-handler 0)
(lumi-message message))
((eq? output 'terminal)
(display message))))
(lumi-message-set-handler 2))이 접근 방식은 함수가 항상 유효한 입력을 받도록 보장하여 안정성을 향상하고 예상치 못한 동작을 방지합니다.
결합 검증 예
;; 다양한 대상으로 메시지 출력을 처리하는 함수
(define (send-message message output)
;; 메시지 및 출력 인수 검증
(if (or (not (string? message)) (string=? message ""))
(error "Message must be a non-empty string")
(if (not (member output '(gui error-console terminal)))
(error "Invalid output destination: " output)
(cond
;; 메시지 콘솔로 보내기
((eq? output 'error-console)
(lumi-message-set-handler 2)
(lumi-message message))
;; GUI 대화 상자로 보내기
((eq? output 'gui)
(lumi-message-set-handler 0)
(lumi-message message))
;; 터미널 창으로 보내기
((eq? output 'terminal)
(display message)))))
;; 기본 메시지 핸들러를 메시지 콘솔로 복원
(lumi-message-set-handler 2))이 버전에서는:
- 이 함수는
message가 비어 있거나 유효하지 않은지 먼저 확인합니다. 메시지가 유효하면output이 허용된 값(gui,error-console,terminal) 중 하나인지 확인합니다. - 두 검사가 모두 통과되면 메시지가 적절한 출력으로 전송됩니다. 그렇지 않으면 명확한 설명과 함께 오류 메시지가 표시됩니다.
- 메시지도 문자열인지 확인하기 위해 추가 검사가 수행됩니다.
이 통합 유효성 검사 함수는 코드를 더 깔끔하게 유지하고, 어떤 동작을 수행하기 전에 두 입력이 모두 검증되도록 하여 함수를 더 견고하게 만듭니다. 또한 디버그 메시징 시스템을 구축하고 있습니다. 코드가 실패하면 우리가 직접 작성한 이유를 확인할 수 있습니다.
Execution error for 'Hello loaded!':
Error: Message must be a non-empty stringExecution error for 'Hello loaded!':
Error: Invalid output destination: gu