[讨论]无注释编程
以前LZ也是一个满篇注释的Coder,但是自从到这个公司,除了写别人调用的api,
有个简单的api功能描述,其他什么都没有。
OK,我就不光说不练了,给大家看看我的代码先。
using System;using System.Collections.Generic;using System.Text;using System.Collections;using System.Collections.Specialized;using System.Web;using System.IO;using XXX.Lib;namespace XXX{ // Url辅助类:对Url进行初步的解析 public class UrlHelper { const int MAX_URI_LENGTH = 512; string _scriptName = string.Empty; CommandResult _parseResult = CommandResult.Success; NameValueCollection _parameters = new NameValueCollection(); char[] _uriInvalidChar = new char[] { '/', '\\' }; char[] _pathInvalidChar = new char[] { '/', '\\', ':', '*', '?', '\"', '<', '>', '|' }; public Uri _uri = null; public string ScriptName { get { return _scriptName; } } public NameValueCollection Parameters { get { return _parameters; } } public CommandResult ParseResult { get { return _parseResult; } } public UrlHelper(Uri originalUri) { _uri = ReplaceUri(originalUri); if (IsUriLengthError()) { return; } if (CheckPathAndQuery()) { ParsePathAndQuery(); } } private Uri ReplaceUri(Uri originalUri) { string uriStr = ReplaceUriWithUrlModel(originalUri); if (uriStr == "") { return originalUri; } else { return new Uri(uriStr); } } private static string ReplaceUriWithUrlModel(Uri originalUri) { string[] splitStr = null; try { foreach (var item in File.ReadAllLines(Hisan.Lib.SystemLib.GetAppRootDir() + "UrlModel.ini")) { splitStr = item.Split(new string[] { "->" }, StringSplitOptions.RemoveEmptyEntries); if (splitStr == null || splitStr.Length != 2) { continue; } if (splitStr[0].Trim() == originalUri.PathAndQuery.Substring(1)) { return originalUri.AbsoluteUri.Replace(splitStr[0].Trim(), splitStr[1].Trim()); } } } catch { } return ""; } private bool IsUriLengthError() { if (_uri == null || _uri.ToString().Length > MAX_URI_LENGTH) { _parseResult = CommandResult.UrlTooLong; return true; } return false; } private bool CheckPathAndQuery() { string pathAndQuery = _uri.PathAndQuery.Substring(1); if (IsUrlInvalidChar(pathAndQuery)) { return false; } if (pathAndQuery.IndexOfAny(_uriInvalidChar) >= 0) { _parseResult = CommandResult.UrlInvalidChar; return false; } else if (pathAndQuery.Length == 0) { _parseResult = CommandResult.NoExistsMethod; return false; } string[] splitPathAndQuery = new string[] { }; if (IsFileNameInvalidChar(pathAndQuery, splitPathAndQuery)) { return false; } return true; } private bool IsFileNameInvalidChar(string pathAndQuery, string[] splitPathAndQuery) { splitPathAndQuery = pathAndQuery.Split(new char[] { '?' }, StringSplitOptions.RemoveEmptyEntries); if (splitPathAndQuery[0].IndexOfAny(_pathInvalidChar) >= 0) { _parseResult = CommandResult.FileNameInvalidChar; return true; } return false; } private bool IsUrlInvalidChar(string pathAndQuery) { if (pathAndQuery.IndexOfAny(_uriInvalidChar) >= 0) { _parseResult = CommandResult.UrlInvalidChar; return true; } return false; } private void ParsePathAndQuery() { string[] splitPathAndQuery = _uri.PathAndQuery.Substring(1).Split(new char[] { '?' }, StringSplitOptions.RemoveEmptyEntries); SetScriptNameAndParameters(splitPathAndQuery); } private void SetScriptNameAndParameters(string[] splitPathAndQuery) { _scriptName = splitPathAndQuery[0]; if (splitPathAndQuery.Length > 1) { _parameters = HttpUtility.ParseQueryString(splitPathAndQuery[1], Encoding.UTF8); } } }}
public UrlHelper(Uri originalUri) { //替换Uri,如果跟进这个方法看的话,会发现把原来的请求更换成已经内置好的Url,这个是为了兼容旧版本Url的,当然这个本不应该存在,但当时那个版本没有自动升级,所以这个没办法。权且当成合适的好了,而且这也不是本次讨论的重点。 _uri = ReplaceUri(originalUri); //如果Uri的长度错误 if (IsUriLengthError()) { //返回 return; } //如果检查路径和查询成功(路径和查询这个暂且这么叫,这个做过Web的都知道Uri.PathAndQuery是获得host后面的字符串的。 if (CheckPathAndQuery()) { //解析路径和查询 ParsePathAndQuery(); } }
越到后来,越来越不想念注释了.确认有人会代码,重构代码,但不会修改注释.
错误的注释比没有注释的问题要大得多,个人感觉.
总之,首先不是考虑把代码写得尽量清晰,易懂.
实在没有办法的时候,还是要补上注释.毕竟实际很难做到无注释编程.
另外,我也看了clean code了,受了蛮多启发的.
[解决办法]
确实你现在要是提,无注释编程.
99%程序员,都会说你不是好程序员.
哈哈
[解决办法]
看书要有书签,
看代码必须有注释,当然注释要正确。(我写的注释有时连我都看不懂)
[解决办法]
不知道大家有没有发现。反正我在vs里面写方法和定义变量都直接用中文,这边既不用注释也不用担心别人不懂英语。哈哈!
[解决办法]
还是写点好,不过自己没有不写注释的习惯!!!
[解决办法]
又看到这种观点了!
既然都说无注释,又说不是一点注释不加。
或者归纳为 该要的注释还是要的,不该要的不要。
怎么听怎么像废话。
还不如说要加强提高写注释的水平,提高代码的可读性。
(或者说标题党比较好)
[解决办法]
我觉得使用索引型(或使用超链接)注释挺好的,至少在重构和修改时,会方便很多
如果是直接在代码里面写注释的话,建议精简精简再精简,因为一旦产生重构,修改注释的工作量远远大于修改代码的工作量
[解决办法]
适当的写还是有好处的。
[解决办法]
注释还是要写滴。。。
[解决办法]
帮你顶顶帖子,学习一下