代码槽点

作者: MicroCai | 来源:发表于2015-03-31 03:21 被阅读643次

原代码

typedef enum{
    UserSex_Man,
    UserSex_Woman
}UserSex;

@interface UserModel :NSObject

@property(nonatomic, strong) NSString *name;
@property (assign, nonatomic) int age;
@property (nonatomic, assign) UserSex sex;

- (id)initUserModelWithUserName:(NSString *)name withAge:(NSUInteger)age;

-(void)doLogIn;


@end

枚举处有如下几个槽点

  • 不应该用 typedef enum 这种 C 形式定义枚举;既然做 iOS,就用 Apple 提供的东西。
  • 性别规范书面的命名是 Gender/Male/Female,而非 Sex/Man/Woman/Boy/Girl 之类。
  • 这一点可能是我多虑了:Male 和 Female 应该是互斥的,结构上用 Union 比较合适。但仍使用 enum 的原因两个:一是常用且易读;二是现实世界情况复杂,不排除极端情况。
  • 要有前缀,且前缀以三个字母为宜。前缀个数其实是有争议的,目前绝大多数的代码,包括流行的开源库都是两个字母前缀,究其原因可能是两个字母更好记,而且苹果也不会刚刚好使用到和我们代码相同两个字母,so……实际情况和要求还是出入的。

类的地方有如下几个槽点

  • UserModel 的命名方式不太好。Model 是设计模型中的概念,不应该将其命名到具体的代码对象中,而且类型必须要有前缀,防止命名冲突,此处命名前缀取 BDK(Bai Du Knows)。
  • :NSObject 之间要有空格。
  • 属性定义的地方 property / 括号 / 类型 / *变量名 之间应该要有空格,此外符号 * 是和变量名紧贴。如 @property (nonatomic, copy) NSString* name; 就是一个不太好的命名习惯。
  • 括号内的修饰词按需按一定顺序排列,两个修饰词间的逗号后面应当有空格。具体的顺序没有硬性规定,我的习惯是 nonatomic 放前面,因为多数的属性修饰词都是 nonatomic,而其他修饰词却不一定一样,把 nonatomic 放前面看起来比较整齐。
  • NSString 类型变量用 copy 修饰比较安全。
  • 属性的类最好对齐。这点不知道算不算槽点,但对齐更好看(看下面的代码 NSString *userName; 和下面两行对齐)。
  • 属性 age 是非负整数,所以使用 int 不太好,而且最好不要使用 C 的类型,应该用 NSUInteger。
  • 方法本身的间隔类似的,参照下系统方法的命名,具体就不多说了,看我最终的代码间隔即可。
  • doLogIn 槽点太多:
    • 两个动词表示一个登录的意思,累赘不合理;
    • login 本身就是一个动词,如果非要拆开,应该是 logOn/logOff,而非 logIn;
    • 登录接口竟然没有参数。我使用了 NSDictionary 可以将所有登录需要的信息全放在里面,便于扩展和修改。
    • 登录方法没有返回值,无法了解登录情况,所以如果有个回调会更好。
  • 初始化方法的槽点也挺多:
    • 方法名中的 Model 和之前提到的问题一致;
    • 方法有返回值,所以方法名的开头应当是返回内容的名词形式,而非动词;
    • 根据方法名的意思推测,返回值应该是用户信息。既如此,应该直接用 BDKUserInfo 作为返回值类型。但也有可能这么做有其他用意,所以为了尊重原代码的意思,我还是将返回值设为 instancetype,返回一个关联类型。

更正过的代码

  • 前缀 BDK 取 Bai Du Knows
  • 为什么类的属性和方法不加前缀?因为它们编译后不在顶级符号表。而且主流开源库的属性和方法命名时,也没有对类的属性和方法加前缀,已经约定俗成。从可读性的角度来说,加前缀是一种无奈之举,降低了代码的可读性。
typedef NS_ENUM(NSInteger, BDKGender)
{
    BDKMale,
    BDKFemale
};

@interface BDKUserInfo : NSObject

@property (nonatomic, copy)   NSString *userName;
@property (nonatomic, assign) NSUInteger userAge;
@property (nonatomic, assign) Gender userGender;

/**
 *  登录百度知道
 *
 *  @param info         登录所需信息
 *  @param successBlock 登录成功 block
 *  @param failedBlock  登录失败 block
 */
- (void)loginWithInfo:(NSDictionary *)info
           successBlock:(void(^)(NSDictionary *resultInfo))successBlock
               failed:(void(^)(NSError *error))failedBlock;
               
/**
 *  初始化用户信息
 *
 *  @param userName 用户名
 *  @param userAge  用户年龄
 *
 *  @return 用户信息
 */
- (instancetype)userInfoInitialedByUserName:(NSString *)userName
                                     userAge:(NSUInteger)userAge;
                                
@end

相关文章

  • 代码槽点

    原代码 枚举处有如下几个槽点 不应该用 typedef enum 这种 C 形式定义枚举;既然做 iOS,就用 A...

  • Android 7.0 ListView ChoiceMode

    工程里原来的代码执行如下操作 在android6.0以下运行良好: 首先以上代码槽点比较多 一会再说。而工程适配...

  • 开机自启动简明代码实现

    不废话了,直接上代码 槽函数:

  • 《山海情》大结局,豆瓣评分9.4,但它的“槽点”并不少

    各位友军,先别急着拔刀。 此槽点非彼“槽点”。咱们今天就来看看《山海情》这部电视剧的“槽点”。 1. “槽点”一:...

  • 槽点(去岁)

    滑天下之大稽么 噢不,这只是必然 主张群体免疫的国家首相 今病毒核酸检测结果为阳性 于是,他就这样有准备地 进入了...

  • 吐点槽

    这几天真是一堆无语事,先从分到的情侣二人间开始说吧...我是真的没想到头一次睡这种房间身边竟然会是个男的,大圆床,...

  • 吐槽点

    2019.02.03 1.我们下车,因为靠旁车很近,他第一次过来帮我看着门让我出来,并且说:当心旁边的宝马。 2....

  • 槽点系统

    槽点系统 白彦洁方法之槽点营销系统 1、我是一个挫货,一个月赚5000, 我想娶美貌如花的老婆,家里有几套房子, ...

  • 槽点太多

    今天一天真的太糟糕了,本来就只有一天休息时间,还用来院级五四演出,一整天都在搞节目,而且槽点也太多了吧。 重要...

  • 吐槽!吐槽!吐槽!!慎点!!

    本人女,24,可是周围的亲朋好友都已经为我的终身大事操心不已,特别是今年连顾客见面都语重心长的说:‘你呀,什么都好...

网友评论

    本文标题:代码槽点

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