Objective-C代码洁癖患者

作者: 我就叫Tom怎么了 | 来源:发表于2017-07-07 23:08 被阅读0次

    西虹市精神类疾病三假医院

    诊断证明

    姓名 我就叫Tom怎么了 科别 洁癖科
    诊断日期 2017年07月07日 主治医师 刘继芬

    病情描述

    从事这一行当也有一段时间了。可以说是一个“iOS”初级开发者了。为什么iOS要被引起来?因为iOS分为许多版本。有的是IOS开发者、有的是ios开发者,而我是最普通的iOS开发者。写到这里我相信有很多人会说这人有病吧?这不都一样!但我不这么认为,如果你叫刘继芬,户口登记人员也是比较随意的人,给你写成“刘积分”,那你今后的生活将一团糟。其实iOS这三个字母的大小写是小事,但是这也证明了你对你所从事行业的尊重度。

    从开始接触OC到现在,编码格式都是我最注意的地方。(先不说代码水平)从来不会要求别人怎么写格式,只是自己要求自己,按照苹果的代码格式游戏规则来,直到昨天看见了Ta写的一段代码。。。

    //获取日期
    -(NSString*)    huoquriqi:(NSDate*)d{
        NSString*riqi =@"";
        NSDateFormatter* df= nil;
        
        if (d !=nil      ) {
            
            if (df== nil)
            {
                df=[[NSDateFormatter alloc]init];
                
                
                
                
                
            }
            [df setTimeStyle:
    NSDateFormatterFullStyle];
                    [df setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
            [df setLocale:[NSLocale currentLocale]];
            riqi =[df stringFromDate:d];
            
        }
    return riqi;
        
    }
    

    这是一个工具类方法,我需要使用到这个功能。看了之后彻底崩溃了,最有良心的是写了注释“获取日期”,然后从方法名到变量名再到格式。为什么“*”号后面有的加空格有的不加,有个加前面有的加后面?为什么换行格式也是那么随意。这段代码是可读的,但是可读性为0,有谁会有耐心去看。无奈修改了一下。

    /* 
     * 获取日期
     *
     * @param date 传入日期date
     *
     * @return 格式化日期
     */
    - (NSString *)getFormatTime:(NSDate *)date 
    {
        NSString *returnValue = @"";
        NSDateFormatter *dateFormatter = nil;
        
        if (date != nil) {
            if (dateFormatter == nil) {
                dateFormatter = [[NSDateFormatter alloc]init];
            }
            [dateFormatter setTimeStyle:NSDateFormatterFullStyle];
            [dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
            [dateFormatter setLocale:[NSLocale currentLocale]];
            returnValue = [dateFormatter stringFromDate:date];
        }
        return returnValue;
    }
    

    不是说我的代码格式有多标准,至少让其他开发者看到的时候不是那么崩溃。最普通的大众格式,苹果官方使用的格式。这是一种游戏规则。

    医生建议

    • 1.类命名方式

    先从类的命名方式开始,见过很多以自己的名字命名的工程师。这样做并非不可,但是别人在看到这个liujifenViewController.h的时候是懵逼的。如果改成ChatViewController.h貌似会易读一些。最好在前面加上公司名称的缩写,比如TXChatViewController.h。增加前缀对于App的开发人员来说,可加可不加,因为不用考虑类名重复的问题。但是对于SDK开发的同学来说,如果第三方集成了你的SDK,但是类名重复了,那将是一件很囧的事情,显得很不专业。

    • 2.头文件声明

    你会很纳闷,这个有什么说的?其实也是有说法的。比如功能相关#import <AVFoundation/AVFoundation.h>#import <CoreLocation/CoreLocation.h>等放在一起,控制器相关放在一起等等。最好在后面增加相关注释,以便其日后他人修改。(为啥要日后。。凭啥!?)
    例:

    #import <AVFoundation/AVFoundation.h>        // 音频
    #import <CoreLocation/CoreLocation.h>        // 定位服务
    
    #import "Gzip.h"                             // 压缩
    
    #import "TXChatViewController.h"             // 聊天界面
    #import "TXChatMessageTableViewCell.h"       // 消息cell
    
    
    • 3.添加代理

    相信这一点大多数人会忽略“空格”。给大家演示一下

    @interface TXChatViewController()<UITableViewDelegate,UITableViewDataSource>
    

    是不是很正常?功能上没有任何影响。请仔细查看苹果的API文档,这里面会多出两个空格!

    @interface TXChatViewController() <UITableViewDelegate, UITableViewDataSource>
    

    第一个是“()”之后的一个空格,第二个是每个代理逗号“,”后面也会增加一个空格。

    • 4.声明全局变量

    大部分写法:

    @property(nonatomic,strong)UITableView*myTableView;
    

    吹毛求疵的写法:

    @property (nonatomic, strong) UITableView *myTableView;
    

    对比一下,是不是更美观一些?

    • 5.方法名

    方法名其实是非常重要的,万物皆方法,方法名让人不易理解,那还造毛万物。

    -(UIButton*)button:(NSString *)string frame:(CGRect)rect color:(UIColor*)color{
        UIButton*button =[UIButton buttonWithType:UIButtonTypeCustom];
        button.frame = rect;
        button.backgroundColor = color;
        [button setTitle:string forState:UIControlStateNormal];
        return button;
    }
    

    创建一个Button的工厂方法,本来是其乐融融的事,看到这个工厂后,我有了离开这个工厂的想法。

    - (UIButton *)createButtonWithFrame:(CGRect)frame title:(NSString *)title backgroundColor:(UIColor *)color
    {
        UIButton *kbutton = [UIButton buttonWithType:UIButtonTypeCustom];
        kbutton.frame = frame;
        kbutton.backgroundColor = color;
        [kbutton setTitle:title forState:UIControlStateNormal];
        
        return kbutton;
    }
    

    如果必要,可以加上注释。

    • 6.if else
    if(ture)
    {
        do something
    }else
    {
        do something
    }
    

    官方写法

    if(ture) {
        do something
    } else {
        do something
    }
    
    • 7.#pragma mark - 的使用

    个人不建议在一个Controller中写太多的代码,不易管理,耦合度高,但是如果业务没法拆离的时候,用上#pragma mark -何尝不是一种好方法。

    #pragma mark - UI渲染
    
    #pragma mark - TableView DataSource
    
    #pragma mark - 网络请求
    
    #pragma mark - 工厂方法
    
    #pragma mark - 工具类
    

    使得找东西很方便。

    诊断结论

    其实这并不是一个好程序员的评判标准,编程思想最为重要。但是代码模样就像一个外衣,以貌取人的事比比皆是。

    • 主治医师:刘继芬 (盖章)
    • 日期 2017年07月07日

    我的代码格式仅供参考,并非准标准。还望大家多指教。

    相关文章

      网友评论

        本文标题:Objective-C代码洁癖患者

        本文链接:https://www.haomeiwen.com/subject/hlrlhxtx.html