Đến nội dung


Hình ảnh
* - - - - 1 Bình chọn

[Thảo luận] Code lisp như thế nào để hạn chế lỗi cho người dùng?


  • Please log in to reply
44 replies to this topic

#41 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 07 June 2013 - 04:42 PM

Cám ơn bạn Lyky+Tue_NV đã có ý kiến trao đổi.

1). Để "ghi nhớ" cái gì đó cho lần sau thì: hoặc không được khử nó (lisp DVH - với a), hoặc không thể khử nó (lisp Lyky - với sn) >> làm gì có chuyện nó vừa cục bộ vừa toàn cục nhỉ? 

2). Nếu để tạo 1 hàm nhập liệu vừa bẫy lỗi vừa lưu biến như ý Lyky thì liệu cái này có gọn nhẹ hơn không?

(defun HA(def)
 (or (and (= (type a) 'int) (< -32769 a 32768)) (setq a def))
 (setq a (cond ((getint (strcat "\nNhap so nguyen <" (itoa a) ">: "))) (a))))
;EX: (HA 1)
 


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#42 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 08 June 2013 - 08:33 AM

Mời mọi người cùng cho ý kiến về bài #38?


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#43 lyky

lyky

    biết vẽ polygon

  • Members
  • PipPip
  • 70 Bài viết
Điểm đánh giá: 126 (tàm tạm)

Đã gửi 08 June 2013 - 08:52 AM

Cám ơn bạn Lyky+Tue_NV đã có ý kiến trao đổi.
1). Để "ghi nhớ" cái gì đó cho lần sau thì: hoặc không được khử nó (lisp DVH - với a), hoặc không thể khử nó (lisp Lyky - với sn) >> làm gì có chuyện nó vừa cục bộ vừa toàn cục nhỉ? 
2). Nếu để tạo 1 hàm nhập liệu vừa bẫy lỗi vừa lưu biến như ý Lyky thì liệu cái này có gọn nhẹ hơn không?

 
Bạn hiểu nhầm ý lyky mất rồi! lyky muốn tạo một hàm con, dùng nhập số nguyên trong các lisp khác thay hàm getint mà, có một số khác nhau chứ:

1. Nếu dùng hàm (HA):
a/- Dòng nhắc luôn cố định là “Nhập số nguyên <gợi ý>:” , một hàm con sẽ thân thiện hơn nếu dòng nhắc “mềm” hơn, ví dụ trong một chương trình nào đó, muốn bạn nhập số con của bạn (chẳng hạn!) mà dòng nhắc: “Nhập số nguyên <gợi ý>:” thì kỳ kỳ. Nên lyky mới thêm ưu tiên nếu có MSG, nếu không có mới trở về mặc định!
b/- Hàm chỉ dùng một biến toàn cục a, vì vậy, mặc dù tiết kiệm dung lượng, nhưng nó không mang tính “rẽ nhánh”, ví dụ: có 2 lisp cùng dùng hàm (HA) để nhập số nguyên → khi lisp1 chạy, lưu lại biến toàn cục a, tiếp tục chạy lisp2: a lại đưa lên làm gợi ý, tuy nhiên, gợi ý đối với lisp1 và lisp2 thì thường khác nhau! Vì vậy, gợi ý đó không xác thực lắm!

2. Nếu dùng hàm (TgI ‘a “msg” <gợi ý>):
c/- Dòng nhắc tùy nhu cầu cụ thể mà thay đổi theo cho phù hợp, khi không cần thay đổi thì “msg” = nil, mặc dù dài loằn ngoằn, nhưng số bước chạy không nhiều hơn mấy?!
d/- (TgI) đưa biến toàn cục ra ngoài hàm con này, do đó, đối với mỗi lisp có dùng nó sẽ có một biến toàn cục riêng, và vì vậy mà nó “rẽ nhánh” tốt hơn, khi chạy nhiều lisp có dùng nó sẽ tránh bị tương tác như trên! Mặc dù rằng, số biến toàn cục nhiều hơn - nếu bạn chấp nhận được!

Mấy lời phân trần, mong các bác vui! Chúc các bác thật nhiều sức khỏe và thành công trong công tác nhé!

@ Bác Doan Van Ha: Topic thật tuyệt diệu, đặc biệt là có được một người “thư ký” kiêm “điều hành” mẫn cán! Mong và hi vọng thật nhiều điều hay và kinh nghiệm các bác chia sẽ cùng anh em!


  • 1

22665_13x13progress.gif   22665_lyky.gif   22665_13x13progress.gif


#44 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 08 June 2013 - 08:56 AM

Chúng ta trở lại với bài vẽ Circle bằng 1 lỗi khác. Lỗi này thường ít được để ý và nếu không để ý thì sẽ khó phát hiện.

Mời mọi người tìm lỗi sau đây, và đề xuất phương án bẫy lỗi.

[Chú ý: các lỗi sẽ update liên tục ở bài #1].

(defun C:VHT( / p r)
 (if
  (and
   (not (initget 1))
   (setq p (getpoint "\nSpecify center point for circle: "))
   (not (initget 7))
   (setq r (getdist p "\nSpecify radius of circle: ")))
  (entmake (list '(0 . "Circle") (cons 10 p) (cons 40 r))))
 (princ))
 

Có lỗi xảy ra khi hệ toạ độ hiện hành không ở WCS.

 

khắc phục: thay (cons 10 p) bằng (cons 10 (trans p 1 0))


  • 2

#45 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 08 June 2013 - 09:36 AM

Cám ơn bác Gia_bach. Lỗi này đã được update ở bài #1.

Đang chờ đợi các bạn post lên những lisp (ngắn gọn) có thể bị lỗi để mọi người cùng học hỏi. Hiện nay, list error đang ngày càng dày thêm rồi đó.

Hoặc các bạn có thể gởi tin nhắn cho tôi về 1 lỗi nào đó, tôi sẽ tổng hợp để đưa lên forum theo hình thức đã và đang làm để chúng ta cùng học hỏi.

Trân trọng và chờ đợi!

@Lyky: cám ơn bạn đã động viên.


  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.