2013-12-03 3 views
5

Давным-давно я быстро взглянул на какой-то код (PERL ... urp), который один из моих менеджеров писал и был ошеломлен системой баннера/заголовка, которую он использовал в своем коде. У меня не было возможности подробно изучить его код, но только из комментариев на экране баннера я мог легко сказать, что должен был делать код, даже издалека.Комментировать Banner/Header лучшие практики/примеры?

К сожалению, это было давно, и наш разговор в то время не поддавался мне, говоря: «Да, хорошо забыть о нашем запуске в dot-com, идущем в туалет, могу ли я делать заметки о вашем стиле кодирования?»

Спустя годы я еще не достиг высокого стиля комментариев, который имеет ясность как (возможно, теперь мифический) код, который я видел в тот день.

Когда я говорю «баннеры», я имею в виду высокоуровневые блочные деления/заголовки, которые многие кодеры используют для создания высокоуровневых решений в своем коде. Они обычно состоит из простого ASCII тира, косых черт, равных знаков и т.д. В моем текущем языке ежедневного использования, один код баннер иерархия/заголовок может быть:

# ======================================================== 
# = Header 1 
# ======================================================== 

# -------------------------------------------------------- 
# - Header 2 
#--------------------------------------------------------- 

# == Header 3 ============================================ 

# -- Header 4 -------------------------------------------- 

# Header 5 

и все обычных вариации.

Хотя мои поиски не нашли ничего примечательного, наверняка где-то в Интернете кто-то пытался собрать примеры этих и представить их систематическим образом?

Может ли кто-то указать на стиль комментариев в стиле баннера, который они нашли полезными? Я не думаю о «О, мне нравятся те, которые используют звездочки», но больше общей стратегии стилей, которая позволяет быстро и легко понять структуру кода на высоком уровне, а также легко смотреть на глаза? Очевидно, что выбор предпочтительной системы из примеров будет проще, чем сравнение описаний.

Примечание: меня не интересует содержание комментариев как таковое, но «чутье», используемое в комментариях, дает четкие указания на общее содержание и организацию кода.

ответ

1

Один из лучших способов, которые я нашел для проверки стиля комментирования, - это использовать инструмент для документирования кода, такой как doxygen, есть список других here, а затем посмотреть, какой был результат: более ясный вывод тем лучше комментарии.

Я бы сказал, что единственными самыми важными точками являются согласованность и четкое указание ранжирования, за которым следует полнота и краткость, т. Е. После того, как вы посмотрели на нее, вы должны знать, как будут выглядеть другие, и насколько значителен тот, смотря на есть. Это заставляет вас иметь хороший дизайн, так как без него вы не знаете, насколько важны вещи.

Следующая вся необходимая информация должна присутствовать но оно должно быть достаточно коротким, чтобы взять в сразу - однако удовлетворяющих оба эти силы вы изменить свой стиль кодирования так, чтобы объекты/код не слишком велик, хорошо назван, не имеет слишком много параметров и т. д., все, что инструменты, такие как lint, пытаются научить нас.

Для кода python сводка стиля в PEP-257 содержит множество полезных рекомендаций и некоторых примеров.

Быстрый поиск кода «Хороший» на моей машине включен Andrea Gavana's Aquabutton.py Я включил в раздел раздел ниже, но вы можете увидеть полный код here - Должен сказать, что это был первый модуль Андреа, который Я открылся, будучи на ранней стадии алфавита, но я уверен, что любой мог бы это сделать.

# --------------------------------------------------------------------------------- # 
# AQUABUTTON wxPython IMPLEMENTATION 
# 
# Andrea Gavana, @ 07 October 2008 
# Latest Revision: 24 Nov 2011, 22.00 GMT 
# 
# 
# TODO List 
# 
# 1) Anything to do? 
# 
# 
# For all kind of problems, requests of enhancements and bug reports, please 
# write to me at: 
# 
# [email protected] 
# [email protected] 
# 
# Or, obviously, to the wxPython mailing list!!! 
# 
# 
# End Of Comments 
# --------------------------------------------------------------------------------- # 

""" 
:class:`AquaButton` is another custom-drawn button class which *approximatively* mimics 
the behaviour of Aqua buttons on the Mac. 


Description 
=========== 

:class:`AquaButton` is another custom-drawn button class which *approximatively* mimics 
the behaviour of Aqua buttons on the Mac. At the moment this class supports: 

* Bubble and shadow effects; 
* Customizable background, foreground and hover colours; 
* Rounded-corners buttons; 
* Text-only or image+text buttons; 
* Pulse effect on gaining focus. 

And a lot more. Check the demo for an almost complete review of the functionalities. 


Usage 
===== 

Sample usage:: 

    import wx 
    import wx.lib.agw.aquabutton as AB 

    app = wx.App(0) 

    frame = wx.Frame(None, -1, "AquaButton Test") 

    mainPanel = wx.Panel(frame) 
    mainPanel.SetBackgroundColour(wx.WHITE) 

    # Initialize AquaButton 1 (with image) 
    bitmap = wx.Bitmap("my_button_bitmap.png", wx.BITMAP_TYPE_PNG) 
    btn1 = AB.AquaButton(mainPanel, -1, bitmap, "AquaButton") 

    # Initialize AquaButton 2 (no image) 
    btn2 = AB.AquaButton(mainPanel, -1, None, "Hello World!") 

    frame.Show() 

    app.MainLoop() 


Supported Platforms 
=================== 

AquaButton has been tested on the following platforms: 
    * Windows (Windows XP); 
    * Linux Ubuntu (10.10). 


Window Styles 
============= 

`No particular window styles are available for this class.` 


Events Processing 
================= 

This class processes the following events: 

================= ================================================== 
Event Name  Description 
================= ================================================== 
``wx.EVT_BUTTON`` Process a `wxEVT_COMMAND_BUTTON_CLICKED` event, when the button is clicked. 
================= ================================================== 


License And Version 
=================== 

:class:`AquaButton` control is distributed under the wxPython license. 

Latest Revision: Andrea Gavana @ 22 Nov 2011, 22.00 GMT 

Version 0.4 

""" 

import wx 

# Constants for the hovering and clicking effects 
HOVER = 1 
""" Indicates that the mouse is hovering over :class:`AquaButton` """ 
CLICK = 2 
""" Indicates that :class:`AquaButton` has been clicked """ 


class AquaButtonEvent(wx.PyCommandEvent): 
    """ Event sent from the :class:`AquaButton` buttons when the button is activated. """ 

    def __init__(self, eventType, eventId): 
     """ 
     Default class constructor. 

     :param integer `eventType`: the event type; 
     :param integer `eventId`: the event identifier. 
     """ 

     wx.PyCommandEvent.__init__(self, eventType, eventId) 
     self.isDown = False 
     self.theButton = None 


    def SetButtonObj(self, btn): 
     """ 
     Sets the event object for the event. 

     :param `btn`: the button object, an instance of :class:`AquaButton`. 
     """ 

     self.theButton = btn 

надрез

class AquaButton(wx.PyControl): 
    """ This is the main class implementation of :class:`AquaButton`. """ 

    def __init__(self, parent, id=wx.ID_ANY, bitmap=None, label="", pos=wx.DefaultPosition, 
       size=wx.DefaultSize, style=wx.NO_BORDER, validator=wx.DefaultValidator, 
       name="aquabutton"): 
     """ 
     Default class constructor. 

     :param Window `parent`: parent window. Must not be ``None``; 
     :param integer `id`: window identifier. A value of -1 indicates a default value; 
     :param Bitmap `bitmap`: the button bitmap (if any); 
     :param string `label`: the button text label; 
     :param `pos`: the control position. A value of (-1, -1) indicates a default position, 
     chosen by either the windowing system or wxPython, depending on platform; 
     :type `pos`: tuple or :class:`Point` 
     :param `size`: the control size. A value of (-1, -1) indicates a default size, 
     chosen by either the windowing system or wxPython, depending on platform; 
     :type `size`: tuple or :class:`Size` 
     :param integer `style`: the button style (unused); 
     :param Validator `validator`: the validator associated to the button; 
     :param string `name`: the button name. 
     """ 

     wx.PyControl.__init__(self, parent, id, pos, size, style, validator, name) 

     self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM) 

     self.Bind(wx.EVT_PAINT, self.OnPaint) 
     self.Bind(wx.EVT_ERASE_BACKGROUND, lambda event: None) 
     self.Bind(wx.EVT_SIZE, self.OnSize) 
     self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) 
     self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp) 
     self.Bind(wx.EVT_LEAVE_WINDOW, self.OnMouseLeave) 
     self.Bind(wx.EVT_ENTER_WINDOW, self.OnMouseEnter) 
     self.Bind(wx.EVT_SET_FOCUS, self.OnGainFocus) 
     self.Bind(wx.EVT_KILL_FOCUS, self.OnLoseFocus) 
     self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) 
     self.Bind(wx.EVT_KEY_UP, self.OnKeyUp) 
     self.Bind(wx.EVT_TIMER, self.OnPulseTimer) 

     if "__WXMSW__" in wx.PlatformInfo: 
      self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDown) 

     self._mouseAction = None 
     self.SetBitmapLabel(bitmap) 
     self._hasFocus = False 
     self._saveBitmap = True 
     self._storedBitmap = wx.NullBitmap 
     self._pulseOnFocus = False 
     self._gammaFactor = 1.0 
     self._gammaIncrement = 0.1 

     self._timer = wx.Timer(self, wx.ID_ANY) 

     self.SetLabel(label) 
     self.InheritAttributes() 
     self.SetInitialSize(size) 

     # The following defaults are better suited to draw the text outline 
     if "__WXMAC__" in wx.PlatformInfo: 
      self._backColour = wx.Colour(147, 202, 255) 
      self._hoverColour = self.LightColour(self._backColour, 30) 
      self._disableColour = self.LightColour(self._backColour, 70) 
      self._textColour = wx.BLACK 
     else: 
      self._backColour = wx.SystemSettings.GetColour(wx.SYS_COLOUR_ACTIVECAPTION) 
      self._hoverColour = self.LightColour(self._backColour, 30) 
      self._disableColour = self.LightColour(self._backColour, 70) 
      self._textColour = wx.WHITE 


    def SetBitmapLabel(self, bitmap): 
     """ 
     Sets the bitmap label for the button. 

     :param `bitmap`: the bitmap label to set, an instance of :class:`Bitmap`. 
     """ 

     self._bitmap = bitmap 
     self.Refresh() 
+0

Согласовано. Можете ли вы указать мне на какой-нибудь (необязательный Python) код, который иллюстрирует это? Я нахожу неудовлетворительным примеры, которые я нашел/создал до сих пор. –

+0

Приведенный выше пример. –

Смежные вопросы