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

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

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

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


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


相关文章
|
消息中间件 存储 缓存
RabbitMQ之消息应答和持久化
【1月更文挑战第11天】 一、消息应答 1.概念 2.自动应答 3.消息应答方法 4.Multiple 的解释 5.消息自动重新入队 6.消息手动应答代码 7.手动应答效果演示 二、RabbitMQ持久化 1.概念 2.队列如何实现持久化 3.消息实现持久化 4.不公平分发 5.预取值
480 74
|
存储 前端开发 JavaScript
医院电子病历编辑器源码 (java语言)
电子病历(EMR,Electronic Medical Record)是用电子技术保存、管理、传输和重现的数字化的病人的医疗记录,取代手写纸张病历,将医务人员在医疗活动过程中,使用医疗机构管理系统生成的文字、符号、图表、图形、数据、影像等数字化内容,并能实现存储、管理、传输和重现的医疗记录,是病历的一种记录形式。
443 1
|
存储 安全 Java
ArrayBlockingQueue 和 LinkedBlockingQueue 有什么区别?
ArrayBlockingQueue 和 LinkedBlockingQueue 有什么区别?
|
SQL 算法 Java
快出数量级的性能是怎样炼成的
我们通过使用开源 SPL 重写了多个金融行业的 SQL 任务,实现了显著的性能提升,如保险公司团保明细单查询提速 2000+ 倍、银行 POS 机交易报表提速 30+ 倍等。这些优化的核心在于使用了更低复杂度的算法,而非依赖硬件加速。SPL 基于离散数据集理论,提供了丰富的高性能算法,使得复杂任务的优化成为可能。更多案例和详细技术解析可参见乾学院的相关课程和图书。
|
Kubernetes Linux 测试技术
|
存储 缓存 NoSQL
【redis】数据量庞大时的应对策略
【redis】数据量庞大时的应对策略
204 2
|
运维 监控 Linux
"熬夜达人揭秘:Linux系统崩溃前夜,如何用这几行代码救局?监控与排查全攻略!"
【8月更文挑战第19天】作为常需熬夜的系统管理员,面对Linux系统问题时,我总结了一套实用的监控与排查方法。通过使用`top`监控CPU使用率、`free`检查内存状况、`iostat`监测磁盘I/O、及`iftop`观察网络流量,结合`ps`、`pmap`和`strace`等工具深入分析,可有效识别并解决系统瓶颈,减少故障处理时间,保障系统稳定运行。
175 0
|
机器学习/深度学习 算法 大数据
【机器学习】拉索回归与坐标下降法
【机器学习】拉索回归与坐标下降法
308 0
|
并行计算 安全 Python
深入理解Python多线程:GIL全局解释器锁的影响
深入理解Python多线程:GIL全局解释器锁的影响
492 0
|
Java Maven
如何解决IDEA的已忽略的pom.xml
如何解决IDEA的已忽略的pom.xml
739 0
下一篇
oss云网关配置