片段
片段(Snippet)是一个编程用语,指的是源代码、机器代码、文本中可重复使用的小区块。通常它们是有正式定义的执行单位,以纳入更大的编程模块。片段经常用来明晰其他“凌乱”函数的功用,或尽量减少使用与其他函数共享的重复代码。
片段管理是某些文本编辑器、程序源代码编辑器、IDE、与相关软件的其中一项功能。其使得用户能够在反复的编辑作业中保持和使用这些片段。
概要
片段管理是文本编辑器一项受欢迎的功能,诸如软件开发人员,经常要求从目录重复输入文字(像是源代码或模板文件)。由于每次输入的内容变化相当轻微(或者完全相同),因此可以把可重复使用的代码分割存储,方便调试与加速开发[1]。
iWeb[2]或一些博客系统允许用户编辑HTML片段,在文章区域外加入像是气象报告之类的Web widget小工具或AdSense网络广告等。
在文本编辑器
包括此功能的文本编辑器通常提供一种机制来管理目录,并以和操作系统允许管理不同文件同样的方式来区别“片段”。这些包括操作的基本管理能力,有查看、添加、编辑、删除、排序、筛选、分组、重命名、存储片段在储藏库、目录或数据库 。
在IDE环境
一些开发人员的应用程序,如微软的Visual Studio(关键字和Tab ↹),与其他的集成开发环境,包含内置结构部分以易于编码。
其他应用程序像是Macromedia Dreamweaver,同样利用这些代码片段在网页开发上。
在JIT编译器
及时编译(JIT)编译器能够将预先编译的代码部分“拼接在一起”,成为一段较长的目标代码/机器代码分段。这能显著地减少演绎时间,同时促进执行效率。
常见方法
除了前述的基本管理能力外,片段管理功能可以按片段之间的交互和片段和文本编辑器的交互范围,或主宰的应用程序做区分。
这些片段功能组群包括:
- 纯文字或"静态"片段
- 交互或"动态"片段
- 脚本片段
静态(Static)片段主要包括固定文本,用户可以选择插入到当前文件内。也许除了相对于新插入文字的光标位置之外,用户不能做其他任何指定。静态片段类似于简单的宏。
动态(Dynamic)片段包括与动态因素结合的固定文本。用户可以同时指定动态因素的内容,以及它们相对于固定文本的位置,选择部分插入到当前文件内。动态因素可能随着当前日期、系统时间、或用户透过GUI输入的文字、来自其他应用程序的内容等。(参见:宏编程)。
脚本(Scriptable)片段包括可运行在宏语言或脚本语言的部分源代码。脚本片段提供用户最大程度的灵活性,然而这会取决于文本编辑器对编程语言的支持程度,对该编辑器而言编程语言是否有名、或者特殊与罕见。
脚本支持的类型不同,但可能包括的功能,像是运行shell命令、提供GUI对话框、或其他用户与操作系统的交互方法;其他应用程序;或其他主控应用程序本身的子组件。
片段编程功能
支持脚本片段的应用程序,所支持的程度编程功能各不相同。下面枚举一些常用的可编程片段功能。
纯文字
虽然纯文字是应用程序的一项基本功能,只支持非可编程的“静态”片段,不过可编程片段也用来和纯文字一起运作。
然而常见的复杂问题,支持可编程片段的环境经常要辨别哪些是“纯文字”、哪些算作“程序指令”。更复杂化这种识别的是,事实上支持可编程片段的应用程序几乎总是包括支持认识多种编程语言,以及强调显示基本语法标亮或执行嵌入式命令。
基于诸如此类理由,可编程片段所夹带的纯文字总需要特别小心,以避免语法和定界符冲突。
常量与变量
可编程片段往往有能力将现有的变量范围或命名空间做结合,用户可以从中任意选择各种常量或变量。这可能包括一些值,像是当前登录用户的电子邮件地址、当前系统时间和日期、或函数的输出值。
脚本片段往往与一或多个当前可用文件关系。因此,变量可能还包括环境变量和指定文件名的参数、光标位置、母目录、和其他有关当前编辑文件的状态资料。
演绎码
脚本片段可能允许执行一或多个编程语言的代码。这可能包括一或多独立的语言,或在特定应用程序中为主体的语言[3]。
填空占位符
脚本片段通常包括一项制度,指定的用户提供值不会确定,直到片段项目的文本在编辑中被插入或激活。有些应用程序定义的特殊标记语法,允许编辑器确定相对于当前编辑缓冲器其他文本的占位符边界。
其他采用图形用户界面和模式对话框的应用程序,允许用户输入一或多个提供给占位符的值。
占位符识别符
占位符通常用一些特殊字符或序列表示,以区别它们是来自其他片段文本。有些系统允许片段占位符被命名为识别符。该识别符可能有助于支持占位符复制或占位符转换之类的功能。
以下示例使用识别符first_name
、last_name
和item
:
Hello {%first_name%} {%last_name%}, Your shipment of {%item%} is now ready to pick up. Thanks {%first_name%}!
占位符复制
这功能允许用户标示出提供给一个占位符的值,该占位符相对于可编程片段的整个文本,应该复制到多个地方。在前述示例中,命名的占位符first_name
就是这种用法的一个例子。
占位符转换
这功能允许用户标示一或多个值提供给一个占位符,该占位符应该在可编程片段文本内其他地方被复制与转换。例如,用户可能会在一个片段部分,提供一个文件标题,并指定文件标题应在其他地方重复,第一个实例作全字母大写,其他实例变小写。
应用程序支持
以下是部分文本编辑器与IDE对片段的支持简要。更多详细信息参见文件编辑器比较。
纯文字 | 动态 | 脚本 | |
Textmate | 是 | 是 | 是 |
Textpad | 是 | 否 | 否 |
Emacs | 是 | 是 | 是 |
参见
脚注与参考资料
- ^ 程式開發-好用的自動程式碼小工具. 悦知文化. 2008-04-08. (原始内容存档于2008-10-03).
- ^ 蘋果發表iLife ’08 iPhoto與iMovie全新改版. Tom's 硬件. 2007-08-24. (原始内容存档于2008-12-03).
- ^ (See e.g., http://code.google.com/p/yasnippet/ (页面存档备份,存于互联网档案馆) YaSnippet, implemented for the Emacs text editor).
外部链接
- Snipt.net (页面存档备份,存于互联网档案馆) Social snippet repository that supports over 127 languages. Snipt.net is the original Snipt, and was launched in early December 2008.
- * [1] (页面存档备份,存于互联网档案馆) Editable snipped search engine.
- Snipt.org (页面存档备份,存于互联网档案馆) The first social media service for sharing code snippets via Twitter, supports 126+ languages.
- Siafoo (页面存档备份,存于互联网档案馆) Social snippet sharing site. Supports 110+ languages.
- Snipplr (页面存档备份,存于互联网档案馆) Social snippet repository that supports over 60 languages.
- https://web.archive.org/web/20090227065727/http://snippets.dzone.com/ A public source code repository.
- https://web.archive.org/web/20090830054802/http://www.daniweb.com/code/java.html
- https://web.archive.org/web/20090531155130/http://www.codesnippt.com/
- https://web.archive.org/web/20090919121217/http://c.snippets.org/ The original C code snippets archive, maintained in memoriam: Auke Reitsma 1947-2003
- The HTML SWAG Home Page Source code collection for Pascal
- PHPSnips PHP-only source code repository.
- PHPSnaps (页面存档备份,存于互联网档案馆) PHP-only source code repository.
- The Pastebin, Evolved (页面存档备份,存于互联网档案馆), article at Dr. Dobb's blog about publicly sharing code snippets
- TYPO3 snippet collection
- gist.github (页面存档备份,存于互联网档案馆)
- Django Snippets
Snippet application server :