📄 x-tclsumm3.html
字号:
</dl><dl class="margin"><p class="listspace"><ul class="Bullet" type="disc"><li><a name="84855"> </a><font face="Helvetica, sans-serif" size="-1" class="sans"><b class="hb">Comments:</b></font> Insufficiently commented code is unacceptable.</li></ul></p><p class="listspace"><ul class="Bullet" type="disc"><li><a name="84856"> </a><font face="Helvetica, sans-serif" size="-1" class="sans"><b class="hb">Procedure Length: </b></font>Procedures should have a reasonably small number of lines, less than 50 if possible.</li></ul></p><p class="listspace"><ul class="Bullet" type="disc"><li><a name="84857"> </a><font face="Helvetica, sans-serif" size="-1" class="sans"><b class="hb">Case Statement:</b></font> Do not use the <b class="keyword">case</b> keyword. Use <b class="keyword">switch</b> instead. </li></ul></p><p class="listspace"><ul class="Bullet" type="disc"><li><a name="84858"> </a><b class="command">expr</b><font face="Helvetica, sans-serif" size="-1" class="sans"><b class="hb"> and Control Flow Commands:</b></font> Do not use <b class="keyword">expr</b> in commands such as <b class="keyword">if</b>, <b class="keyword">for</b> or <b class="keyword">while</b> except to convert a variable from one format to another:<p class="table"><table border="0" cellpadding="0" cellspacing="0"><tr><td colspan="20"><hr class="tablerule"></td></tr><tr valign="top"><td colspan=1 rowspan=1><p class="BodyLeft"><a name="85038"> </a>CORRECT: </p></td><td width="10"> </td><td colspan=1 rowspan=1><pre class="CodeLeft"><b><a name="85040">if {$id != 0} {</a></b></pre></td><td width="10"> </td></tr><tr valign="top"><td colspan=1 rowspan=1><p class="BodyLeft"><a name="85042"> </a>CORRECT: </p></td><td width="10"> </td><td colspan=1 rowspan=1><pre class="CodeLeft"><b><a name="85044">if {[expr $id] != 0} {</a></b></pre></td><td width="10"> </td></tr><tr valign="top"><td colspan=1 rowspan=1><p class="BodyLeft"><a name="85046"> </a>INCORRECT: </p></td><td width="10"> </td><td colspan=1 rowspan=1><pre class="CodeLeft"><b><a name="85048">if {[expr $id != 0]} {</a></b></pre></td><td width="10"> </td></tr><tr><td colspan="20"><hr class="tablerule"></td></tr><tr valign="middle"><td colspan="20"></td></tr></table></p></li></ul></p><p class="listspace"><ul class="Bullet" type="disc"><li><a name="84865"> </a><b class="command">expr</b><font face="Helvetica, sans-serif" size="-1" class="sans"><b class="hb"> and </b></font><b class="command">incr</b><font face="Helvetica, sans-serif" size="-1" class="sans"><b class="hb">:</b></font> Do not use <b class="keyword">expr</b> to increment or decrement the value of a variable. Use <b class="keyword">incr</b> instead.<p class="table"><table border="0" cellpadding="0" cellspacing="0"><tr><td colspan="20"><hr class="tablerule"></td></tr><tr valign="top"><td colspan=1 rowspan=1><p class="BodyLeft"><a name="85057"> </a>CORRECT: </p></td><td width="10"> </td><td colspan=1 rowspan=1><pre class="CodeLeft"><b><a name="85059">incr index</a></b></pre></td><td width="10"> </td></tr><tr valign="top"><td colspan=1 rowspan=1><p class="BodyLeft"><a name="85061"> </a>CORRECT: </p></td><td width="10"> </td><td colspan=1 rowspan=1><pre class="CodeLeft"><b><a name="85063">incr index -4</a></b></pre></td><td width="10"> </td></tr><tr valign="top"><td colspan=1 rowspan=1><p class="BodyLeft"><a name="85065"> </a>INCORRECT: </p></td><td width="10"> </td><td colspan=1 rowspan=1><pre class="CodeLeft"><b><a name="85067">set index [expr $index + 1]</a></b></pre></td><td width="10"> </td></tr><tr><td colspan="20"><hr class="tablerule"></td></tr><tr valign="middle"><td colspan="20"></td></tr></table></p></li></ul></p><p class="listspace"><ul class="Bullet" type="disc"><li><a name="84872"> </a><b class="command">wtxPath</b><font face="Helvetica, sans-serif" size="-1" class="sans"><b class="hb"> and </b></font><b class="command">wtxHostType</b>: Use these routines when developing tools for Tornado. With no arguments, <b class="keyword">wtxPath</b> returns the value of the environment variable <b class="symbol_UC">WIND_BASE</b> with a "<b class="operator">/</b>" appended. With an argument list, the result of <b class="keyword">wtxPath</b> is an absolute path rooted in <b class="symbol_UC">WIND_BASE</b> with each argument as a directory segment. Use this command in Tornado tools to read resource files. The <b class="keyword">wtxHostType</b> call returns the host-type string for the current process (the environment variable <b class="symbol_UC">WIND_HOST_TYPE</b>. if properly set, has the same value). For example:</li></ul></p><dl class="margin"><dd><pre class="Code2"><b><a name="84873">source [wtxPath host resource tcl]wtxcore.tcl set backenddir [wtxPath host [wtxHostType] lib backend]*</a></b></pre></dl><p class="listspace"><ul class="Bullet" type="disc"><li><a name="84874"> </a><b class="command">catch</b><font face="Helvetica, sans-serif" size="-1" class="sans"><b class="hb"> Command:</b></font> The <b class="command">catch</b> command is very useful to intercept errors raised by underlying procedures so that a script does not abort prematurely. However, use the <b class="keyword">catch</b> command with caution. It can obscure the real source of a problem, thus causing errors that are particularly hard to diagnose. In particular, do not use <b class="keyword">catch</b> to capture the return value of a command without testing it. Note also that if the intercepted error cannot be handled, the error must be resubmitted exactly as it was received (or translated to one of the defined errors in the current procedure):<p class="table"><table border="0" cellpadding="0" cellspacing="0"><tr><td colspan="20"><hr class="tablerule"></td></tr><tr valign="top"><td colspan=1 rowspan=1><p class="BodyLeft"><a name="85082"> </a>CORRECT: </p></td><td width="10"> </td><td colspan=1 rowspan=1><pre class="CodeLeft"><b><a name="85091">if [catch "dataFetch $list" result] { if {$result == "known problem"} { specialCaseHandle } else { error $result }</a></b></pre></td><td width="10"> </td></tr><tr valign="top"><td colspan=1 rowspan=1><p class="BodyLeft"><a name="85072"> </a>INCORRECT: </p></td><td width="10"> </td><td colspan=1 rowspan=1><pre class="CodeLeft"><b><a name="85074">catch "dataFetch $list" result</a></b></pre></td><td width="10"> </td></tr><tr><td colspan="20"><hr class="tablerule"></td></tr><tr valign="middle"><td colspan="20"></td></tr></table></p></li></ul></p><p class="listspace"><ul class="Bullet" type="disc"><li><a name="84879"> </a><b class="command">if then else</b><font face="Helvetica, sans-serif" size="-1" class="sans"><b class="hb"> Statement:</b></font> In an <b class="keyword">if</b> command, you may omit the keyword <b class="keyword">then</b> before the first command body; but do not omit <b class="keyword">else</b> if there is a second command body.<p class="table"><table border="0" cellpadding="0" cellspacing="0"><tr><td colspan="20"><hr class="tablerule"></td></tr><tr valign="top"><td colspan=1 rowspan=1><p class="BodyLeft"><a name="85106"> </a>CORRECT: </p></td><td width="10"> </td><td colspan=1 rowspan=1><pre class="CodeLeft"><b><a name="85116">if {$id != 0} { ... } else { ... }</a></b></pre></td><td width="10"> </td></tr><tr valign="top"><td colspan=1 rowspan=1><p class="BodyLeft"><a name="85110"> </a>INCORRECT: </p></td><td width="10"> </td><td colspan=1 rowspan=1><pre class="CodeLeft"><b><a name="85122">if {$id !=0} then { ... } { ... }</a></b></pre></td><td width="10"> </td></tr><tr><td colspan="20"><hr class="tablerule"></td></tr><tr valign="middle"><td colspan="20"></td></tr></table></p></li></ul></p><p class="listspace"><ul class="Bullet" type="disc"><li><a name="84884"> </a><font face="Helvetica, sans-serif" size="-1" class="sans"><b class="hb">Return Values:</b></font> Tcl procedures only return strings; whatever meaning the string has (a list for instance) is up to the application. Therefore each constant value that a procedure can return must be described in the procedure documentation, in the <i class="term">RETURNS:</i> block. If a complex element is returned, provide a complete description of the element layout. Do not use the <b class="keyword">return</b> statement to indicate that an abnormal situation has occurred; use the <b class="operator">error</b> statement in that situation. </li></ul></p><dl class="margin"><dd><div class="Indent"><a name="84885"> </a>The following illustrates a complex return value consisting of a description:</div><br></dl><dl class="margin"><dd><pre class="Code2"><b><a name="84886"># Return a list of 11 items: vxTicks taskId status priority pc # sp errno timeout entry priNormal name return [concat [lrange $tiList 0 1] [lrange $tiList 3 end]]</a></b></pre></dl><dl class="margin"><dd><div class="Indent"><a name="84887"> </a>The following illustrates and simple return value:</div><br></dl><dl class="margin"><dd><pre class="Code2"><b><a name="84888"># This code checks whether the VxMP component is installed: if [catch "wtxSymFind -name smObjPoolMinusOne" result] { if {[wtxErrorName $result] == "SYMTBL_SYMBOL_NOT_FOUND"} { return -1 # VxMP is not installed } else { error $result } } else { return 0 # VxMP is installed }</a></b></pre></dl><p class="listspace"><ul class="Bullet" type="disc"><li><a name="84889"> </a><font face="Helvetica, sans-serif" size="-1" class="sans"><b class="hb">Error Conditions:</b></font> The Tcl <b class="keyword">error</b> command raises an error condition that can be trapped by the <b class="keyword">catch</b> command. If not caught, an error condition terminates script execution. For example:</li></ul></p><dl class="margin"><dd><pre class="Code2"><b><a name="84890">if {$defaultTaskId == 0} { error "No default task has been established." }</a></b></pre></dl><dl class="margin"><dd><div class="Indent"><a name="84891"> </a>Because every error message and error code must be described in the procedure header in the <i class="term">ERRORS:</i> block, it is sometimes useful to call <b class="keyword">error</b> in order to replace an underlying error message with an error expressed in terms directly relevant to the current procedure. For example:</div><br></dl><dl class="margin"><dd><pre class="Code2"><b><a name="84892">if [catch "wtxObjModuleLoad $periodModule" status] { error "Cannot add period support module to Target ($status)" }</a></b></pre></dl></dl><dl class="margin"><dd><p class="Body"><a name="84354"> </a></p><dd><p class="Body"><a name="83403"> </a></p></dl></dl><a name="foot"><hr></a><p class="navbar" align="right"><a href="index.html"><img border="0" alt="[Contents]" src="icons/contents.gif"></a><a href="GuideIX.html"><img border="0" alt="[Index]" src="icons/index.gif"></a><a href="x-tclsumm.html"><img border="0" alt="[Top]" src="icons/top.gif"></a><a href="x-tclsumm2.html"><img border="0" alt="[Prev]" src="icons/prev.gif"></a><a href="x-toolman.html"><img border="0" alt="[Next]" src="icons/next.gif"></a></p></body></html><!---by WRS Documentation (), Wind River Systems, Inc. conversion tool: Quadralay WebWorks Publisher 4.0.11 template: CSS Template, Jan 1998 - Jefro --->
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -