1688app官方下载常州seo招聘

当前位置: 首页 > news >正文

1688app官方下载,常州seo招聘,360官方网站网址,网站开发与维护相关课程版权声明 这个大部分笔记是观看up主红桃A士的视频记录下来的#xff0c;因为本人在学习的过程中也经常出现类似的问题#xff0c;并且觉得Up主的视频讲解很好#xff0c;做此笔记反复学习#xff0c;若有侵权请联系删除#xff0c;此推荐视频地址#xff1a;【改善丑陋的…版权声明 这个大部分笔记是观看up主红桃A士的视频记录下来的因为本人在学习的过程中也经常出现类似的问题并且觉得Up主的视频讲解很好做此笔记反复学习若有侵权请联系删除此推荐视频地址【改善丑陋的代码】 https://www.bilibili.com/video/BV1844y1N7S8/p28share_sourcecopy_webvd_source688b3f7cfe13111b787853fb99306d7b 1.命名规则 本命名规范针对深度学习根据我平时写代码的时候自己总结的一套规则。 1.1 路径命名规则 全部采用小写代码使用名词不适用动词。 比如我自己的一个代码结构 —- data 数据集 —- models模型 —- dataprocess数据处理 —- logs日志文件 —- utils工具类1.2 代码文件/类命名 驼峰命名法则开头大写使用名字、动名词 比如我自己一个代码命名 —- ModelingAbstrct模型训练抽象类 —- DataSetLoader数据集加载类 —- DataProcesser: 数据预处理类1.3 函数/变量命名规则 java使用驼峰命名法首字母小写动词加名词 python使用蛇形命名法,全部使用小写字母使用下划线做为分隔符号 比如我自己的一个代码命名 —- def convert_word_to_token():将汉字转换成token —- def load_origin_data():加载原始数据 —- best_micaroF1最优微平均 —- max_doument_length最大文本长度2.高可读命名规范 2.1 为什么命名这么重要 原因 第一眼被人看到留下第一印象看不懂代码片段的时候会结合命名进行联想获取某个范围中的关键信息时会使用全局字符查找 那么如何又能规范命名 变量名能否看出这个变量关联什么东西变量名是否能够看出变量是用来做什么的 举一个例子 给一段我们通常容易写的代码命名 class File { int d; } bool flagfalse; ListFilelist1new ListFile(….); foreach(var item in list1){if(item.d0){flagtrue;break;} }看了这段代码是不是很熟悉就像我们平时写的代码一样代码中的变量没有人和语义信息需要联系上下文才可以看出代码所表达的含义。 ** 优化命名规范** class File { int daysSinceModifycation }bool isFileChangedfalse ListFilecreateFilesnew ListFile(…); foreach(var file in createdFiles){if(file.daysSinceModification0){isFileChangedtrue;break;} }这是优化后的代码是不是感觉代码的可读性瞬间提高了? 2.2 变量的命名规范 2.2.1 整型变量命名 举个小例子我们需要命名一个整数的天数和时间看看一般人是怎么命名的然后大佬又是怎么命名的。 int d; //菜鸡 int days;// 正常//大佬的命名方式将天数与用途全部写入命名中 int elapsedTimeInDays;// 流逝的时间天数 int daysSinceCreation;// 创建的时间天数 int daysSinceModdification;//修改的时间天数 int fileAgeInDays;// 文件存在时间天数//—————————————- int t; int times;int timesOfRequestRetry;//请求重复次数注意点: 1.如果命名需要注释来补充那其本身就不算名副其实2.明确计量对象(What)和计量单位(Count,Time,Day,Minute,Second) 2.2.2 布尔类型变量命名 举个小例子 boolean flag; // 我想表达进程是否已经完成 boolean loaded; //我想表达页面是否加载完成//高级表达 boolean isProcessFinished; boolean isPageLoaded;注意点: 1.以正逻辑为主(个人习惯), 减少反逻辑带来的可读性影响2.前缀词(is,can,has,need) 名词形容词/动词让变量更直观 2.2.3集合型变量命名 通常我在遍历集合的时候都是用item作为变量如果有多个item的时候时候就会混淆。 举个例子 ListFilelist1new ListFile(….) // 创件一个file list foreach(var item in list){ …….. }//—————规范表达——————– ListFilecreatedFilesnew ListFile(…..); foreach(var file in createdFiles){ ………. }注意点 1.对于自定义类型名可以考虑作为变量名中的一部分2.加_上复数表示可以让遍历操作的代码可读性更加直观 最后对开始的案例进行一个规范的修改

  1. 3变量命名容易出现名不副实的场景 1.使用简单代码调试之后准备正式使用的时候 注意:是否有测试时图方便而命名不规范的地方 2.拷贝网上的代码用于项目中时 注意:是否有需要调整命名的地方 3.业务逻辑修改之后 注意:是否有命名和现有逻辑不匹配的地方 4.阅读自己或他人之前编写的代码的时候 注意:是否有不符合规范的地方 2.4 比较建议的重构原则 定要全局修改所有引用处避免存在全局变量的影响只要看到不规范的地方就可以顺手修改避免以后忘记每一处小小的优化都是对代码质量的提升 3.对变量做有意义的区分 如果程序员只是为满足编译器或解释器的需要而写代码就会制造麻烦。 例如: 因为同一作用范围内东西不能重名你可能会随手改掉其中一个名称或干脆以错误的拼写充数。 3.1 案例分析 3.1.1 数字系列命名 举个例子 public void copyChars(char a1[],char a2[]){for(int i0;ia1.length;i)a2[i]a1[i]} }问题: 依义命名成了依数命名这样的名称纯属误导没有提供正确信息对可读性带来危害。 后续如果还存在相近的变量仍然存在命名冲突的烦恼。 优化 public void copyChars(char sourceChars[],char destinationChars[]){for(int i0;ia1.length;i)destinationChars[i] sourceChars[i]} }使用sourceChars/source和destinationChars/destination作为参数名。即清晰表示了变量本身的含义又不容易有后续命名冲突上的烦恼。 3.1.2 nonsense命名 举个例子 class Product{… }class ProductInfo{…. }class ProductdData{…. }问题: Info和Data本身意义含混无论是否加上它们意义都基本没有区别。 无法体现类之间的不同点会让代码阅读者抓狂。 优化 如果打算这样命名先问自己: 几个类之间具体的含义/功能区别是什么是否有必要分成多个类?如果有必要区分是否具有更清晰的命名? (通常一一定可以找到更有区别意义的命名) 3.2 变量名容易出现无意义区分的场景 1.多次修改代码后编译一直出现错误 注意:耐心定位代码中的问题切勿暴躁地随意修改。 2.设计、编码的思考不够 注意:命名时不仅要考虑本身的含义还需要注意相近意义的区分。 3.3 比较建议的重构原则 1.研究清楚逻辑后再小心修改。 代码中有相近命名时本身就容易混淆理解代码逻辑后再修改可以避免重构后引发问题。 2.代码是给程序员阅读和修改的编码时应尽量从读者的角度去思考。 4.避免误导命名 程序员必须避免留下掩藏代码本意的错误线索。 4.1 误导的来源: 1.缩写/简写误导2.多义词汇误导3.变量类型误导4.外形相似误导 4.2 案例分析 4.2.1 缩写/简写误导一使用的缩写/简写只有自己认知 //通用的简写/缩写 // Get source position GetSrcPos();//Convert rgb to gray format Rgb2Gray();//可能只有自己才看的懂的 // Set datas status SetDataSta()//Query user address QueryUserAdd();问题: 1.使用的简写/缩写形式不一定每人都能理解需要具体研究代码才明白。2.简写/缩写的结果不规范出现同义词的情况。 优化 //Set datas status SetDataStatus(); //Query user address QueryUserAddress()1.如果要用简写就使用通用的/大众认可的。 2.不确定是否能被理解的情况下尽量用全写这样不会有问题。 4.2.2 多义词汇误导——出现其他含义的联想 原文举例: hp、aix、 sco不该用作变量名因为都是Unix平台的专有名称。 举个例子 //开始时间or持续时间 public bool SetMonitorTime(){ //Set something /Windows注册表or登记机关? public string QueryRegistryContent(){ //Query something }问题 如果没有上下文语境的提示会有双关含义。 优化: public bool SetMonitorStartTime(){ //Set something } class WindowsRegistry{public string QueryRegistryContent(){//Query something} }1.添加对应上下文的语境比如迁移到类中或者模块里方便理解。2.更换/添加对应单词。 4.2.3 变量类型误导——一某些命名会让人误解变量的类型 举个例子 class Account{…… } Account[] accountList;问题: 别用accountList来表示一组账号除非它真的是List类型List对于程序员有特殊意义。 优化: class Account{…..Account[] accountGroup;Account[] bunchOfAccounts;Account[] accounts;删除类型名用更清晰的命名替代(即便容器是List,也最好别用其命名)。 4.2.4 外形相似误导一-两个命名过于相近/含有 易混淆字符 举个例子 class XYZControllerForHandlingOfStrings{ } class XYZControllerForStorageOfStrings{ }inta 1;if(O 1){a O1;else{| 01;问题: 两个命名过于相似阅读者看到后可能产生误会。O,0,o以及i, 1这样的字符很相近容易看错。 优化: 避免变量名过于相似(尤其是长变量名)避免使用易混淆字符。 5.函数命名常见误区以及命名规则总结 5.1 动词滥用问题 注意: 避免滥用通用单词 问题: 通用单词可以在很多场景下命名但不能区分具体函数职责。当函数本身的实现途径不同时难以从函数名得到足够的信息 下面就列举几个例子 5.1.1 万能的Get GetTotalAmount();上述的函数名是表达什么呢 获取属性? 获取本地存储内容? 获取网络内容? 获取数据库内容? 获取计算后的内容 … 5.1.2 万能的Add AddCharacter();上述函数名是想表达什么呢 添加到头部? 添加到尾部? 从中间插入字符? … 5.2 各类函数命名动词详细总结 5.2.1 创建/销毁 动词用途示例Create创建实例常用于实例化方法和工厂方法的命名CreateInstanceInitialize初始化实例的属性和设置Initialize本身也可作为类方法用来初始化InitializeInstance,InitializeLoad加载配置根据配置创建内容LoadFromConfigDestroy销毁实例常用语析构方法DestroyInstanceUninitialize清理实例的属性和设置通常和Initialize对应UninitializeInstance,Uninitialize 5.2.2 获取/设置 动词用途示例Get常用于取属性的类方法命名也可作为通用获取方法命名GetStartTimeFetch通过网络请求获取内容FetchAllUsersCalculate通过计算获取内容CalculateTotalAmountRead读取(多用于文件配置等)ReadFile,ReadConfigQuery查询QueryRemainingAmountFind查找(多用于数据库集合等),和search相似FindOrderReceive接收(多用于文件消息等)ReceiveNewMessagePull拉取PullLastestSourceCodeSet常用于设置属性的类方法命名也可作为通用设置方法命名SetStartTimeWrite写入(文件/配置等)WriteFile,WriteConfigPut放入PutUserWithIdPush存入,推送(通知)PushNotification 5.2.3 更新 动词用途示例Reset强调重置(标记,状态)ResetTimerRefresh用于命名刷新(多用于页面,缓存等)RefreshCurrentPageUpdate更新(多用于配置状态等)UpdateUserSetting 5.2.4 添加/移除 动词用途示例Add用于通用添加方法命名AddNewStudentAppend强调在尾部添加(追加)AppendCharacterInsert强调插入(可以在任意位置)InsertCharacterDelete表示删除,和Remove相近DeleteDirectoryRemove表示移除,和Delete相近RemoveInvalidDeals 5.2.5 启动/停止 动词用途示例Open开启(多用于开启状态,打开文件等)OpenEnhanceModeStart开始(强调开始某个流程)StartPortListeningLaunch发动/启动(多用于启动程序,服务)LaunchAssistServiceClose关闭(多用于关闭状态,关闭文件等)CloseEnhanceModeStop停止(强调流程的终止)StopPortListeningPause暂停(强调流程的暂停有可能后续会继续开启)PausePageLoadingFinish完成(强调流程的完成)FinishRequesting 5.2.6 集合类型相关数据处理 动词用途示例Filter过滤,筛选(强调按照某些条件)FilterByNameMerge合并(有时会带上合并规则)MergeTwoConfigConcat拼接(直接在结尾添加)ConcatToArraySplit分割SplitInputDeduplicate去重(去重完全相同的项)DeduplicateListReverse颠倒,反向排列ReverseRecordSort排序(有时会带上排序规则)SortDealsByAmountFill填充(一般会进行覆盖)FillAmountList 5.2.7 通用业务数据处理 动词用途示例Parse解析(解析成某些格式,解析提取某些内容)ParseFromJson,ParseResultAnalyse分析(不一定能通过简单的方式获取)AnalyseLocationConvert类型转换(通常用于从一个类型转换到另一种类型)ConvertToStringFormat格式化数据FormatToLocaleStringValidate合法性/有效性的校验ValidateUserInputsEnsure期待值的校验EnsureUserAgeCompose组成(一般由多项内容组成一个结果)ComposeMessageEncode编码(依赖约定的编码格式)EncodeUrlDecode解码(依赖约定的解码格式)DecodeUrlEncrypt数据加密(依赖约定的加密算法)EncryptContentDecrypt数据解密(依赖约定的解密算法)DecryptContentBackup备份(需要注意拷贝方式避免误导)BackupUserSettingsRestore恢复RestoreUserSettingsImport导入(通常用于按照特定格式的文件转换)ImportFromFileExport导出(通常用于转换成特定格式的文件)ExportToFileCompress压缩(依赖约定的算法)CompressOversizedFileDecompress解压缩(依赖约定的算法)DecompressOversizedFile