Coding style 评论横幅/标题最佳实践/示例?
很久以前,我快速浏览了我的一位经理正在编写的一些代码(PERL…urp),他在代码中使用的横幅/标题系统让我大吃一惊。我没有机会深入研究他的代码的细节,但仅仅从屏幕上的横幅评论,我就可以很容易地知道代码要做什么,即使是从很远的地方 不幸的是,那是很久以前的事了,我们当时的谈话并不适合我说,“是的,我们忘了我们的网络公司刚开始破产,我能记下你的编码风格吗?” 几年后,我还没有实现像我那天看到的(可能现在是虚构的)代码那样清晰的高级注释风格 当我说“横幅”时,我指的是许多编码人员用来在他们的代码中创建更高级别分区的高级块划分/头。它们通常由简单的ASCII破折号、斜杠、等号等组成。在我当前的日常使用语言中,一个代码横幅/标题层次结构可能是:Coding style 评论横幅/标题最佳实践/示例?,coding-style,comments,Coding Style,Comments,很久以前,我快速浏览了我的一位经理正在编写的一些代码(PERL…urp),他在代码中使用的横幅/标题系统让我大吃一惊。我没有机会深入研究他的代码的细节,但仅仅从屏幕上的横幅评论,我就可以很容易地知道代码要做什么,即使是从很远的地方 不幸的是,那是很久以前的事了,我们当时的谈话并不适合我说,“是的,我们忘了我们的网络公司刚开始破产,我能记下你的编码风格吗?” 几年后,我还没有实现像我那天看到的(可能现在是虚构的)代码那样清晰的高级注释风格 当我说“横幅”时,我指的是许多编码人员用来在他们的代码中创
# ========================================================
# = Header 1
# ========================================================
# --------------------------------------------------------
# - Header 2
#---------------------------------------------------------
# == Header 3 ============================================
# -- Header 4 --------------------------------------------
# Header 5
和所有通常的变化
虽然我的搜索没有发现任何值得注意的地方,但肯定有人在网络上的某个地方试图收集这些例子,并以系统的方式展示它们
有人能指出他们发现有用的横幅评论式“系统”吗?我想的不是“哦,我喜欢那些用星号的”,而是一个整体的风格策略,使高级代码的构建快速、易于理解,同时也易于观察?显然,从示例中选择首选系统比比较描述更容易
注意:我对注释本身的内容不感兴趣,但对注释上用于提供总体代码内容和组织的清晰指示的“天赋”感兴趣。我发现验证注释样式的最佳方法之一是使用代码文档工具,如doxygen,还有一个列表,然后看看输出是什么样的——输出越清晰,评论就越好 我想说的是,最大的一点是一致性和排名的明确指示,其次是完整性和简洁性,即,一旦你看了一个,你应该知道其他人会是什么样子,以及你看的那个有多重要。这迫使你有一个好的设计,因为没有它,你不知道事情有多重要 接下来,您需要的所有信息都应该显示出来,但是它应该足够短,以便一眼就能看到-然而,满足这两个要求的都迫使您更改编码样式,以便对象/代码不太大、命名良好、参数不太多等等。,所有像lint这样的工具试图教给我们的东西 对于python代码,上的样式摘要提供了许多有用的指南和一些示例 在我的机器上快速查找一些“好”代码,我在下面包含了一部分代码,但你可以看到完整的代码-我必须说,这是我打开的Andrea的第一个模块,在字母表中很早,但我相信任何模块都可以
# --------------------------------------------------------------------------------- #
# 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:
#
# andrea.gavana@gmail.com
# andrea.gavana@maerskoil.com
#
# 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
剪断
同意。您能给我指出一些(可选的Python)代码来举例说明这一点吗?我发现迄今为止我发现/创建的示例不令人满意。上面添加了一个示例。
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()