没有经历过长期项目多人开发的人,真的很难感受到代码规范的重要性。在代码开发的时候,这里刚好碰到一个很好的例子。截图如下:
意思截图为NSString拓展类中的通用方法。
全局搜索关键字【szy_thumbUrlWithSize:】,有42个文件76个地方在使用,
搜索【szy_thumbUrlWithSize】有25文件53处在调用。
问题:
1、方法(1、2、3)虽然方法功能一致,只是参数不一致,但是无法单独检索,带参数的方法,此为方法名称不规范
2、方法(1、4)唯一的区别是,方法4将屏幕分辨率至于该方法内部实现,而方法一在外部实现。但从方法名称无法区分出来,而且还没有备注清楚,此处有两不规范。
规范总结:
1、方法功能一致,但是必须要有对应的方法名称,或参数的关键词带有全局的唯一性,以便全局检索,特别是全局通用方法。
2、方法名称要规范,尽量做到,看到方法名称就能知道该方法的作用
3、备注,万恶的备注。多人开发项目,就会存在水平差距、理解偏差,那么就一定要做到,即使是你认为再简单明了的方法或属性名称。
多人项目开发,我不要你认为,而是要大家都确认,要做到这一点,那么久必须做好备注。
上代码,这是我认为个人认为比较规范的代码,如有不同意见,欢迎指正:
七牛图片链接参数编辑处理:
@interface ZTHUtils : NSObject /// 七牛图片链接 - 参数编辑(带URL) /// @param url 图片链接 /// @param size 设置链接的尺寸(屏幕分辨率内部处理) /// @param webp 是否转webp格式 + (NSString *)QN_imageURLEditingWithUrl:(NSString *)eUrl size:(CGSize)size webp:(BOOL)webp; /// 七牛图片链接 - 基本处理 - 参数拼接(不带URL) /// @param size 设置图片的尺寸(屏幕分辨率内部处理) /// @param webp 是否转webp格式 + (NSString *)QN_imageUrlSpliceWithSize:(CGSize)size webp:(BOOL)webp; /// 七牛视频链接 - 单帧缩略图处理 /// @param size 设置链接的尺寸(屏幕分辨率内部处理);如果宽高都为0,则默认直接获取图片原尺寸缩略图 + (NSString *)QN_videoUrlThumbnailWithSize:(CGSize)size; @end @implementation ZTHUtils /// 七牛图片链接 - 参数编辑(带URL) /// @param url 图片链接 /// @param size 设置链接的尺寸(屏幕分辨率内部处理) /// @param webp 是否转webp格式 + (NSString *)QN_imageURLEditingWithUrl:(NSString *)eUrl size:(CGSize)size webp:(BOOL)webp { // 1、判空 if ([eUrl isKindOfClass:[NSNull class]] || !eUrl.length) { return nil; } // 2、不是链接,直接返回不处理 if (![eUrl.lowercaseString hasPrefix:@"http://"] && ![eUrl.lowercaseString hasPrefix:@"https://"]) { return eUrl; } NSString* suffix = @""; // 使尺寸不为0 if (size.width == 0 && size.height == 0) { size.width = 200; } if (size.height != 0 || size.width != 0) { suffix = [ZTHUtils QN_imageUrlSpliceWithSize:size webp:webp]; } else { return eUrl; } // 转编码处理 NSString *urlscale = @""; NSRange range = [eUrl rangeOfString:@"?"]; NSString *tmpUTF8String = [@"|" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; //如果链接中存在问号,则在截个图时不再用问号 if (range.length == 0) { urlscale = [NSString stringWithFormat:@"%@?%@",eUrl,suffix]; }else{ urlscale = [NSString stringWithFormat:@"%@%@%@",eUrl,tmpUTF8String,suffix]; } //先解码,再编码,防止二次编码导致图片下载不了 NSString *urlStringDecode = [urlscale stringByRemovingPercentEncoding]; NSString *urlStringEncode = [urlStringDecode stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; return [urlStringEncode copy]; } /// 七牛图片链接 - 参数拼接处理(不带URL) /// @param size 设置图片的尺寸(屏幕分辨率内部处理) /// @param webp 是否转webp格式 + (NSString *)QN_imageUrlSpliceWithSize:(CGSize)size webp:(BOOL)webp { NSString* suffix = @"imageView2/2"; if (size.width != 0 || size.height != 0) { CGFloat _scale = [UIScreen mainScreen].scale; CGFloat s_w = size.width * _scale; CGFloat s_h = size.height * _scale; if (s_w != 0 && s_h == 0) { suffix = [suffix stringByAppendingString:[NSString stringWithFormat:@"/w/%ld",(long)s_w]]; } else if (s_w == 0 && s_h != 0) { suffix = [suffix stringByAppendingString:[NSString stringWithFormat:@"/h/%ld",(long)s_h]]; } else if (s_w != 0 && s_h != 0) { suffix = [suffix stringByAppendingString:[NSString stringWithFormat:@"/w/%ld/h/%ld",(long)s_w,(long)s_h]]; } } // 添加转webp格式 if (webp) { suffix = [suffix stringByAppendingString:@"/format/webp"]; } // 说明没有做拼接处理 if ([suffix isEqualToString:@"imageView2/2"]) { return @""; } else { return suffix; } } /// 七牛视频链接 - 单帧缩略图处理 /// @param size 设置链接的尺寸(屏幕分辨率内部处理);如果宽高都为0,则默认直接获取图片原尺寸缩略图 + (NSString *)QN_videoUrlThumbnailWithSize:(CGSize)size { NSString *urlStr = @""; if ([urlStr containsString:@"?"]) { urlStr = [NSString stringWithFormat:@"%@&vframe/jpg/offset/1/rotate/auto", urlStr]; } else { urlStr = [NSString stringWithFormat:@"%@?vframe/jpg/offset/1/rotate/auto", urlStr]; } if (size.width == 0 && size.height == 0) { return urlStr; } else { CGFloat _scale = [UIScreen mainScreen].scale; CGFloat s_w = size.width * _scale; CGFloat s_h = size.height * _scale; if (s_w != 0 && s_h == 0) { urlStr = [urlStr stringByAppendingString:[NSString stringWithFormat:@"/w/%ld",(long)s_w]]; } else if (s_w == 0 && s_h != 0) { urlStr = [urlStr stringByAppendingString:[NSString stringWithFormat:@"/h/%ld",(long)s_h]]; } else if (s_w != 0 && s_h != 0) { urlStr = [urlStr stringByAppendingString:[NSString stringWithFormat:@"/w/%ld/h/%ld",(long)s_w,(long)s_h]]; } return urlStr; } } @end
如果觉得自己代码编码还不够规范的时候,可以了解下这篇文章:如何让自己的代码更整洁