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

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

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

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


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


相关文章
|
11月前
|
NoSQL 算法 架构师
程序员的自我修行——如何越走越长
程序员的自我修行——如何越走越长
|
12月前
|
设计模式 算法 程序员
代码能力,程序员自我修养之基石
提高代码能力不是一蹴而就的事,需要我们不断努力,通过持续学习和练习、参与开源项目、阅读优秀的代码、与他人合作、提升解决问题的能力等方式,提高自己的代码能力,为自己为公司创造价值。
171 0
代码能力,程序员自我修养之基石
|
12月前
|
Web App开发 前端开发 算法
程序员的自我修养:如何写出高质量的代码
程序员的自我修养:如何写出高质量的代码
166 0
|
架构师
架构师的自我修养
软件架构,指从宏观角度说明一套软件系统的组成和特性。 架构设计与需求分析,概要设计,详细设计最大的区别在于“宏观”二字。要去架构师必须具有大局观,从全局角度思考问题。
141 0
架构师的自我修养
|
算法 JavaScript Unix
1024程序员节:谈谈自我感受
1024程序员节:谈谈自我感受
214 0
|
搜索推荐 程序员
程序员的自我修养
程序员的自我修养 10
125 0
程序员的自我修养
|
设计模式 IDE 测试技术
你是一名努力工作的程序员,还是懒惰的程序员?
当人们在进行一项体力工作时,你很容易评估他们工作的努力程度。你可以看到他们的身体动作,看他们流了多少汗水。也可以去看他们的工作成果:砖墙越砌越高,地上的洞越来越大。对努力工作的认可和奖励是人类一个非常基本的本能,这也是为什么我们对耐力运动如此着迷的原因之一。然而,在管理一些技术创造型的员工时,这种对体力上的努力工作的本能欣赏却变成了一个问题。高效率的知识工作者通常看起来并不像是在努力工作。
你是一名努力工作的程序员,还是懒惰的程序员?
|
存储 中间件 Java
《程序员的自我修养》
从程序员的群体基数,自我成长,职业发展,开源文化等多方面介绍程序员这个“物种”,希望能够对刚刚进入或即将进入这个行业的同学有所帮助。
1492 4
《程序员的自我修养》

相关实验场景

更多