程序员的自我修养:论代码规范的重要性

简介: 程序员的自我修养:论代码规范的重要性

没有经历过长期项目多人开发的人,真的很难感受到代码规范的重要性。在代码开发的时候,这里刚好碰到一个很好的例子。截图如下:

1a49772642684c579e3e07b64e7c1fff.png


意思截图为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


如果觉得自己代码编码还不够规范的时候,可以了解下这篇文章:如何让自己的代码更整洁


相关文章
代码之美:从混乱到秩序的编程旅程
在编程的世界里,代码不仅仅是冷冰冰的文字和符号的组合。它们是思想的载体,是解决问题的工具,更是艺术与科学的结晶。本文将带你领略编程过程中的美学,从最初的混乱无序到最终的清晰有序,探索如何通过良好的设计原则、清晰的逻辑结构以及持续的重构来提升代码质量,从而使得代码不仅能够高效运行,还能成为令人赏心悦目的艺术品。
|
5月前
|
设计模式 JavaScript 程序员
探索源码:程序员的自我提升之路
探索源码:程序员的自我提升之路
40 1
|
6月前
|
开发框架 Java .NET
不惑之年,反思我如何成为一个程序员
不惑之年,反思我如何成为一个程序员
50 0
|
设计模式 算法 程序员
代码能力,程序员自我修养之基石
提高代码能力不是一蹴而就的事,需要我们不断努力,通过持续学习和练习、参与开源项目、阅读优秀的代码、与他人合作、提升解决问题的能力等方式,提高自己的代码能力,为自己为公司创造价值。
241 0
代码能力,程序员自我修养之基石
|
NoSQL 算法 架构师
程序员的自我修行——如何越走越长
程序员的自我修行——如何越走越长
|
Web App开发 前端开发 算法
程序员的自我修养:如何写出高质量的代码
程序员的自我修养:如何写出高质量的代码
200 0
|
设计模式 前端开发 JavaScript
10 - -位优秀前端的自我修养|学习笔记
快速学习10 - -位优秀前端的自我修养
182 0
|
程序员
程序员如何做好代码重构?
代码重构重构就是在不改变软件系统外部行为的前提下,改善它的内部结构。重构不是重写,它们的区别你可以理解为,重构是修复代码,大框架不变。重写是扔掉原来的,重新设计框架。
219 0
程序员如何做好代码重构?
|
存储 中间件 Java
《程序员的自我修养》
从程序员的群体基数,自我成长,职业发展,开源文化等多方面介绍程序员这个“物种”,希望能够对刚刚进入或即将进入这个行业的同学有所帮助。
1571 4
《程序员的自我修养》
|
搜索推荐 程序员
程序员的自我修养
程序员的自我修养 10
172 0

热门文章

最新文章