понедельник, 10 января 2011 г.

Процесс программирования с псевдокодом

Совершенный код рекламирует подход к написанию функций называемый "Процесс программирования с псевдокодом". Упрощенная суть его в том, что в начале описывается работа функции в виде обычного текста, а затем этот текст преобразуется в комментарии и под каждым из них записывается реальный код. Плюс данного подхода заключается в том, что значительно упрощается процесс написания сложной функции, и к тому же она сразу получается хорошо задокументированной. В процессе реального использования данного подхода я понял, что мне не хватает возможности по преобразованию моего описания функции в комментарий с сохранением отступов. В результате в моем конфигурационном файле emacs я написал следующий код:


(defun my-ppp-comment-region (top bottom)
  ""
  (interactive "r")
  (setq macro [home ?\M-m ?\C-z ?/ ?\C-z ?/ ? ])
;;  (apply-macro-to-region-lines top bottom macro
  (save-excursion
    (let ((end-marker (copy-marker bottom))
          next-line-marker)
      (goto-char top)
      (if (not (bolp))
          (forward-line 1))
      (setq next-line-marker (point-marker))
      (while (< next-line-marker end-marker)
        (goto-char next-line-marker)
        (save-excursion
          (forward-line 1)
          (set-marker next-line-marker (point)))
        (unless (looking-at "[ \t]*$")
            (save-excursion
              (let ((mark-active nil))
                (execute-kbd-macro (or macro last-kbd-macro)))))
        );;while
      (set-marker end-marker nil)
      (set-marker next-line-marker nil))))

и затем добавил
(define-key c-mode-base-map (kbd "C-M-;") 'my-ppp-comment-region)

в
c-mode-common-hook

например так:

(defun my-c-mode-common-hook ()
  ;; включить режимы auto-newline и hungry-delete
  (c-toggle-auto-hungry-state 1)
  (flyspell-prog-mode);;включаем проверку правописания в комментариях и строках 
  (ispell-change-dictionary "american")
  ;; работает как C-j  
  (define-key c-mode-base-map "\C-m" 'c-context-line-break)
  ;;добавлеям комментарии для Проектирования с Помощью Псевдокода
  (define-key c-mode-base-map (kbd "C-M-;") 'my-ppp-comment-region)
  ...
)
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)

в результате по C-M-; мое описание волшебным образом превращается в готовый комментарий к функции.

Комментариев нет:

Отправить комментарий