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

没有经历过长期项目多人开发的人,真的很难感受到代码规范的重要性。在代码开发的时候,这里刚好碰到一个很好的例子。截图如下:
请添加图片描述意思截图为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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瓜子三百克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值