西虹市精神类疾病三假医院
诊断证明
姓名 | 我就叫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日
我的代码格式仅供参考,并非准标准。还望大家多指教。
网友评论