object- c 编码规范和指导。Python学习日记-基础语法1

object-c 编码规范及指导

本章目录

  • Part One:标识符
  • Part Two:Python关键字
  • Part Three:注释
  • Part Four:行和缩进, 空行
  • Part Five:多行语词

查看了查看资料,Python是故模块(module)和 包(package)来集团大型文件之。
模块 是一个是因为 变量、函数、类
等主导因素结合的效能单元,设计良好的模块通常是高内聚、低耦合、可复用、易维护的。而一个模块内部是得分包一个要么基本上只类似的。
包 是管制模块的容器,它具有
可嵌套性:一个确保得蕴涵模块和其他保险。从文本系统的见来拘禁,包就是是目录,模块就是文件(之前写第一独Python程序里创建的py文件)。

文档版本

版本号 修改时间 修改内容 修改人
1.0 2011-04-12 创建 贺发虎
1.1 2015-01-21 修改 谢躜

标识符

标志符其实也就算是命名规则,在Python里面要要遵照以下原则:

  • 首先单字符必须是配母表中字母或下划线’_’;
  • 标识符的另的有些由字母、数字和下划线组成;
  • 标识符对大小写敏感;
  • 未克以Python关键字作标识符名称。

稍看下去,跟Java的命名规则平等,不过呢起几乎点是要尽量避免的平整:

  • 单字符名称, 除了计数器和迭代器;
  • 包/模块名被的连字符(-);
  • 双双下蛋划线开头并最后的名称(Python保留, 例如init)。

以也,由于组织结构的不等同(Java是保证跟类似,而Python是确保及模块),所以于命名约定上也时有发生一些不比:

  • 所谓“内部(Internal)”表示无非模块内可用,或者,在类内是维护要个体的;
  • 所以才下划线(_)开头表示模块变量或函数是protected的(使用import *
    from时莫见面包含);
  • 故而对生划线(__)开头的实例变量或艺术表示类内私有;
  • 以相关的好像与一等函数放在和一个模块里。不像Java,
    没必要限制一个近似一个模块;
  • 对类名使用特别写字母开头的单词(如CapWords,
    驼峰法),但是模块名应当据此小写加下划线的方式(如lower_with_under.py)。
    尽管已有成百上千留存的模块使用类于CapWords.py这样的命名,但本都不鼓励这样做,因为要模块名正要和类名一致,这会被丁劳。

这些好总结为Python之父Guido推荐的业内:

Type(模块) Public(公有的) Internal(内部的)
Modules(模块) lower_with_under _lower_with_under
Packages(包) lower_with_under
Classes(类) CapWords _CapWords
Exceptions(异常) CapWords
Functions(函数) lower_with_under() _lower_with_under()
Global/Class Constants(常量) CAPS_WITH_UNDER _CAPS_WITH_UNDER
Global/Class Variables(类变量,即静态变量) lower_with_under _lower_with_under
Instance Variables(实例变量,即成员变量) lower_with_under _lower_with_under(protected) or __lower_with_under (private)
Method Names(方法) lower_with_under() _lower_with_under() (protected) or __lower_with_under() (private)
Function/Method Parameters(参数) lower_with_under
Local Variables(局部变量) lower_with_under

汇总,我们在事先写的率先独python程序其实是休正规之。
咱之前定义的模块名字是:

图片 1

创建Python文件.png

兹应当变更化:

图片 2

修改模块名.png

概述

对其他工程项目来说,统一的动工规范还是保证工程质量的基本点元素。堪称当今人类最好抽象、最复杂的工—软件工程,自然更不克差。高格调、易维护的软件开发离不起清严格的编码规范。本文档详细描述object-C软件开发过程中的编码规范。本标准为适用于具有以文档中出现的源码。

Python关键字

Python中,不可知下要字作为标识符。Python的官方API库里面提供了一个keyword模板,可以出口当前版的持有重大字:

import keyword
var = keyword.kwlist
print(var)

时下一共有33个主要字:

['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

文件结构

持有iphone的源文件均要含有一个业内之验证,说明包含了该文件的称呼、功能概述、作者、版权和本历史信息相当情节。文件头与函数的求证的格式为:

注释

注解可以自及一个备注的企图,团队通力合作的上,个人编写的代码经常会面给多丁调用,为了给人家会再次便于掌握代码的大路,使用注释是可怜实用之。
Python中的注解只要出3种植:单行注释,多尽注释以及编码注释。

  1. 单行注释
    单行注释是为#开头,#号后的始末编译器会忽略掉。比如:

# 这是一条输出语句
print('Hello World')  # 后面的内容会被忽略掉

可看看,#声泪俱下后要加个空格,要无会见起警示。

  1. 大抵履行注释
    大抵履行注释可以据此几近只# 标注

# 这是一条输出语句
# 第二行注释
print('Hello World')

也足以为此”’ ”’或者””” “””包裹

# 这是一条输出语句
# 第二行注释

"""
多行注释
多行注释
"""

'''
多行注释
多行注释
'''
print('Hello World')

而为,多行注释的标示为不过用于多尽字符串,顺道查看了一下官方的源码,发现用#暨”””的比较多。

  1. 编码注释
    编码注释在Python2.x所以的比多,因为于旧版里,文件默认使用ASKII码保存文件。而以Python3.x里,文件默认使用unicode编码,这样的话就可分辨中文了,不见面给中文产生乱码。
    编码注释最标准的格式是:

# -*- coding: <encoding name> -*-

例如:

# -*- coding: gbk -*-

如此形容的裨益是好支撑多编辑器,移植性好。
另外,内需专注的凡须以编码注释放在第一执还是第二执
还发另外比较简单的写法,比如官方源码使用的是:

# encoding: utf-8

还可以是:

# coding=<encoding name>  

# vim: set fileencoding=<encoding name> :

总之,所有的正儿八经是随一个正则表达式给来之:

\%^.*\n.∗\?#.*coding[:=]\s*[0-9A-Za-z-_.]\+.*$ 

里面的意思就是是必须包含#,且#号前未可知发出字符换行等任何字符,字符串中必须包含coding后面可以同:或者=接下来就编码名称。

1.文本头说明

/*fileName
======================================================================
模块名 :<模块名称>
文件名 :<文件名>
实现功能:<描述该文件实现的主要功能> 
作者  :<作者部门和姓名>
版本  :<当前版本号>
创建日期:
备注  :<其它说明>
修改日期:<日期格式:yyyy-mm-dd>
修改人 :<修改人>
修改内容:<修改内容>
======================================================================
fileName*/

推行和缩进,空行

Python是以缩进来代表代码块的,不欲{}。
缩进的空格数是可变的,但是和一个代码块的言语必须包含相同的缩进空格数,所以极是为此4个空格来支配缩进,例如:

if True:
    print("True")
else:
    print("False")

设设缩进未平等为,IDE工具会自行唤醒有荒谬,比如

if True:
    print("True")
    print("Same")
else:
    print("False")
  print("Blabla")

会报错:

图片 3

IDE缩进错误.png

粗犷运行,也会报错:

图片 4

运行错误.png

除此以外,空行也是Python程序的相同部分。
函数之间或类的点子之间用空行分隔,表示一致段子新的代码的启。类与函数入口中吧因此一行空行分隔,以崛起函数入口的启幕。

空行与代码缩进不同,空行并无是须使遵循的Python语法。书写时不栽入空行,Python解释器运行为非会见拧。但是空行的用意在于分隔两段落不同功能还是含义的代码,便于日后代码的维护或重构。
若果无入空行,不会见报错,不过会有警告,比如:

图片 5

空行提示.png

2.办法求证

/**
 *  <#Description#>
 *
 *  @param task    <#task description#>
 *  @param arrange <#arrange description#>
 *
 *  @created by 谢躜 on 2015-01-21 09:30:19
 */

大抵行语句

  1. 分行
    Python通常是为此一行来写了一长长的语句,但是倘若告诉句过长,可以为此\来落实多执行,例如:

item_one = 1
item_two = 2
item_three = 3
total = item_one + \
        item_two + \
        item_three
print(total)

行使Pycharm的话,我们无非需要在怀念使分行的地方敲回车即可。
在 [], {}, 或 () 中之大都行语句,不欲以反斜杠(),例如:

total = ['1', '2', '3'
        '4', '5']

总而言之,使用IDE工具以来,语句的子公司并不需要太过在意。

  1. 一行
    前说之是单排语句分多行显示,那么只要多行语句想写及一行也,在多长长的告词间采取分好分割即可,例如:

import sys; x = 'runoob'; sys.stdout.write(x + '\n')

虽说语法上这么形容没错,不过IDE工具会报警告,提示

图片 6

一行警告.png

征这种写法并无给提倡。

  1. 代码组
    当面前的缩进部分,有涉嫌过代码块这概念,不过那时候关注的要是缩进。那么,什么是代码组?

缩进相同的一组语句构成一个代码块,我们称之代码组。
像if、while、def和class这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。
我们将首行及后面的代码组称为一个子句(clause)。

例如:

a = 3
if a == 1:
    print('a')
    print('A')
elif a == 2:
    print('b')
    print('B')
else:
    print('c')

并且精心研究了下Python风格规范,貌似还有为数不少,回头有空再转了,具体参考Google出品的Python风格指南

3.头文本之援说明

以h文件中引用其他类用@class fileName
每当m文件中援引其他类都为此#import “fileName.h

4.文本之社结构

文档结构 .png

参考 coding ios 客户端源码规范

    ├── Coding_iOS
    │   ├── Models:数据类
    │   ├── Views:视图类
    │   │   ├── CCell:所有的CollectionViewCell都在这里
    │   │   ├── Cell:所有的TableViewCell都在这里
    │   │   └── XXX:ListView(项目、动态、任务、讨论、文档、代码)和InputView(用于聊天和评论的输入框)
    │   ├── Controllers:控制器,对应app中的各个页面
    │   │   ├── Login:登录页面
    │   │   ├── RootControllers:登录后的根页面
    │   │   ├── MeSetting:设置信息页面
    │   │   └── XXX:其它页面
    │   ├── Images:app中用到的所有的图片都在这里
    │   ├── Resources:资源文件
    │   ├── Util:一些常用控件和Category、Manager之类
    │   │   ├── Common
    │   │   ├── Manager
    │   │   ├── OC_Category
    │   │   └── ObjcRuntime
    │   └── Vendor:用到的一些第三方类库,一般都有改动
    │       ├── AFNetworking
    │       ├── AGEmojiKeyboard
    │       ├── ASProgressPopUpView
    │       ├── ActionSheetPicker
    │       ├── FontAwesome+iOS
    │       ├── MJPhotoBrowser
    │       ├── MLEmojiLabel
    │       ├── NSDate+Helper
    │       ├── NSStringEmojize
    │       ├── PPiAwesomeButton
    │       ├── QBImagePickerController
    │       ├── RDVTabBarController
    │       ├── SMPageControl
    │       ├── SVPullToRefresh
    │       ├── SWTableViewCell
    │       ├── UMENG
    │       ├── UMessage_Sdk_1.1.0
    │       ├── XGPush
    │       ├── XTSegmentControl
    │       └── iCarousel
    └── Pods:项目使用了[CocoaPods](http://code4app.com/article/cocoapods-install-usage)这个类库管理工具

命名规则

若果想只要中之治本一个稍微复杂一点之系统,针对中事物之等同拟统一、带层次结构、清晰明了的命名规则就是是必需而且死好用的工具。
活泼于生物学、化学、军队、监狱、黑社会、恐怖组织等各个领域内的雅量有识先辈们都曾经无数差地以实际行动证明了以上公理的不错。除了上帝(设它好改世间万物之秩序)以外,相信没有人来实力对其不屑一顾。
于软件开发这无异莫大抽象而且十分复杂的移位受到,命名规则的根本再度亮愈发突出。一模仿定义美而完全的、在漫天项目面临集合以的命名规范将大大提升源代码的可读性和软件的可维护性。
以引入细节之前,先证一下命名规范之总体标准:

  • 同一性:
    于编制一个子模块或派生类的时刻,要遵循其基类或整模块的命名风格,保持命名风格在普模块中之同一性。
  • 标识符组成:
    标识符采用英文单词或其构成,应当直观且可拼读,可望文知意,用词应规范。
  • 极致小化长度以及最大化信息量原则:
    当维系一个标识符意思明确的还要,应当尽量缩短其尺寸。
  • 避免超负荷相似:
    决不出现单凭借大小写区分的貌似的标识符,例如iIfunctionFunction等等。
  • 避在不同级别的作用域中重名:
    程序中永不出现名字完全相同的局部变量和全局变量,尽管两岸的作用域不同而非见面有语法错误,但容易使人口误会。
  • 是的命名具有互斥意义之标识符:
    因此正确的反义词组命名具有互斥意义的标识符,如: minValueInteger
    maxValueIntegergetName()setName()

5. h,m,nib文件称命名

除了特别类等个别情况(不期望给用户作为一个普通的、正常的近乎的情状)外,iphone的h,m,nib文件称命名该遵循以下规则:

(1) h,m,nib文件称命名的名称都使以充分写字母开头;

(2)
如果是一般的视图控制器,则后面长ViewController,即h,m,nib文本称的称呼仿效分别吗:

***ViewController.h
***ViewController.m
***ViewController.xib

(3)设是由定义的视图类,则后面长对应之类型,

UITableViewCell 简写为 Cell,UICollectionViewCell 简写为CCell

h,m,nib文件称的名称仿效分别吗:

***View.h、
***View.m、
***View.xib;

***Cell.h、
***Cell.m、
***Cell.xib;

***CCell.h、
***CCell.m、
***CCell.xib;

6. 变量

(1)持有变量名命名的名号都使盖小写字母开头。

(2)仿佛吃定义变量名称:其主要格式为***+对象类所在的名称,如给UITextFiled命名,则只要写成***TextField、如valueTextFiledtitleTextField等,相应的UILabel的命名有valueLabeltitleLabel等,UITableView尽管使描绘成valueTableView相当于。其规则也一样适用于NSArray、NSMutableDictonary相当所有项目;
除此以外,如果手上变量是祥和仿佛中行使,则使当背后长下划线,如valueArray_抵,而以性质被定义时用valueArray。

(3)全局变量全部因为单词_global千帆竞发,以类结尾,如_global***TextField_global***String等。

(4)分子变量。在变量前面加上下划线_

   UIButon * _cancelButton;

(5)里头NSMutaleArray、NSMutableDictonary及NSArray、NSDictonary的终极相同,分别吗Array及Dict,不开区分。

7. 方法

(1)有办法名命名的称还设坐小写字母开头,要求语义完整清楚,不要乱用简写。

(2) 在ViewController中,一个控件可能有多独事件
如果是事件之称号,则使优先为目标名称加上对象的风波,如

UIButton *nameButton;

#program mark - Event
//默认情况下 EventTouchUpInside 我们简写成 Pressed
- (IBAction) nameButtonPressed:(id)sender;
//EventTouchDown
- (IBAction) nameButtonTouchDown:(id)sender;

(3) Action。
如果是在一个视图类吃,一个控件的风波相对于之视图类来说只有是探望图类的一个事变,则非待盖控件对诸如名称加上对像事件命名。
而是根据视图类来定名。

@interface AbstractActionSheetPicker : NSObject
@end


UIBarButtonItem *sysDoneButton = [self createButtonWithType:UIBarButtonSystemItemDone target:self
                                                             action:@selector(actionPickerDone:)];


UIBarButtonItem *sysCancelButton = [self createButtonWithType:UIBarButtonSystemItemCancel target:self
                                                               action:@selector(actionPickerCancel:)];


- (IBAction)actionPickerDone:(id)sender
{

}

- (IBAction)actionPickerCancel:(id)sender
{

}

8. 宏

宏全部之所以小写,并且为此必要的下划线分开,如

#define NAME_VALUE  @"dddd"
#define MAXSIZE     30

9. 常量

常量用配母 k 开头, 如

static const NSUInteger kUsernameRow = 0;

10. 代码风格

代码风格以及版式代码风格的要怎么强调还不过分。一段稍长一些的无格式代码基本上就是不行读的。
先来拘禁一下立方面的总体标准:

  • 空行的应用
    空行起在分隔程序段落的企图。空行得体(不过大多吗不过不见)将设程序的布局进一步鲜明。空行不见面浪费内存,虽然打印带有空行的程序是会见多淘一些纸,但是值得。所以不要舍不得用空行。
    这里不举行规定,视自己之风骨使早晚
  • 语与代码行
    一行代码只开相同桩业务,如止定义一个变量,或单写一长达语句。这样的代码容易看,并且有利于给写注释。
    “if”、“for”、“while”、“try”、“catch”等告知句自占一行,执行语句不得紧跟其后。不论执行报告句有微还使加
    “{ }” 。这样可以防止书写和改动代码时起失误。
  • 缩进和针对性共同
    先后的分界符 “{” 和 “}” 的格式如下所示:

while(1){
    //statement
    for(int i=0;i<=n;i++){
        //statement
    }
}

以上风格是预约风格,而脚风格则免提倡。

while(1)
{
    //statement
    for(int i=0;i<=n;i++)
    {
        //statement
    }
}

“{ }” 之内的代码块当 “{”
右边一个制表符(4单半交锋空格符,直接以键盘上之Tab键来进行控制)处错误对联合。

  • 极端充分尺寸
    代码行最可怜尺寸宜控制以80独字符中。代码行不要过长,否则眼睛看无恢复,也不便利打印。不过是规则可观看情形相当放松。

  • 空格的用
    重中之重字后如果养空格。象NSInteger等要字下至少要留住一个空格;
    旁的不做要求,如for语句里面的几长语句、&&、||等。

  • 修饰符的职
    为便于理解,应当以修饰符 “*” 和 “&”
    紧依变量,例如NSString *testStringNSArray *testArray

  • 注释
    诠释的职应同给叙的代码相邻,可以放在代码的上或右,不可在下方。
    边写代码边注释,修改代码同时修改相应的注解,以管教注释与代码的一致性。不再实用的注释要抹。
    注解应当规范、易懂,防止注释有二义性。错误的笺注不但无用反而损害。
    当代码比较丰富,特别是起差不多再度嵌套时,应当以局部截的结处加注释,便于阅读。对于事务逻辑,常用的枚举数据,或者代码对应的参数毫无疑问要发证,如

/**
 *  设置类型
 *
 *  @param type  类型 0 公有,1 私有
 *
 *  @created by 谢躜 on 2015-01-21 18:47:24
 */
- (void)setType:(NSInteger)type
{
    if(0 == type){
        //当类型为公有的时候
        ...
    }else if (1 == type){
        //当类型为私有的时候
        ...
    }
}

11. h文件组织

类 interface h文件中分别依次列出属性方法

#import <UIKit/UIKit.h>

@interface DateilViewController : UIViewController
{
    //变量
    NSString *_dataString;
}


//属性
@property (nonatomic, strong) NSDictionary *supplyDateilDict;
@property (nonatomic, strong) NSMutableArray *supplyArray;

//方法
- (void)handleData;
- (void)createView;


@end

协议 protocol ,依次列出 @required,@optional

@protocol UITableViewDataSource<NSObject>

@required

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

// Row display. Implementers should *always* try to reuse cells by setting each cell's reuseIdentifier and querying for available reusable cells with dequeueReusableCellWithIdentifier:
// Cell gets various attributes set automatically based on table (separators) and data source (accessory views, editing controls)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

@optional

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;              // Default is 1 if not implemented

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;    // fixed font style. use custom view (UILabel) if you want something different
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;

// Editing

// Individual rows can opt out of having the -editing property set for them. If not implemented, all rows are assumed to be editable.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;

// Moving/reordering

// Allows the reorder accessory view to optionally be shown for a particular row. By default, the reorder control will be shown only if the datasource implements -tableView:moveRowAtIndexPath:toIndexPath:
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath;

// Index

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView;                                                    // return list of section titles to display in section index view (e.g. "ABCD...Z#")
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index;  // tell table which section corresponds to section title/index (e.g. "B",1))

// Data manipulation - insert and delete support

// After a row has the minus or plus button invoked (based on the UITableViewCellEditingStyle for the cell), the dataSource must commit the change
// Not called for edit actions using UITableViewRowAction - the action's handler will be invoked instead
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;

// Data manipulation - reorder / moving support

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath;

@end

12. m文件组织

ViewController

/*Class 的生命周期
* Class 生命周期回调方法放在最前面
*/
#pragma mark - Lifecircle

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{  
}

- (void)viewDidLoad
{  
}

- (void)viewWillAppear:(BOOL)animated
{
}

- (void)viewDidDisappear:(BOOL)animated
{
}

- (void)didReceiveMemoryWarning
{
}

- (void)dealloc
{
}

/* 所有的控件事件放在生命周期后面
* 包括 Event ,Action,Notifation
* 如果是相近的方法用program mark 分类。排在一起。 
*/
#pragma mark - Event
- (void)backAction
{
}

- (void)selectTabbarButton:(UIButton *)sender
{
}

+ (void)reachabilityChanged:(NSNotification *)note
{
}

#pragma mark KeyBoardNotify
- (void)keyboardWillChange:(NSNotification *)note
{
}


- (void)keyboardShowNotify:(NSNotification *)note
{

}
//键盘隐藏调整界面
- (void)keyboardHideNotify:(NSNotification *)note
{

}

/*其它方法分为两部分, 
* 第一部分是数据模型操作相关的方法
* 第二部分为视图,控件相关操作 
*/
#pragma mark - Fouction

#pragma mark - HandleModal
- (void)getSupplyDateilData 
{
}

// 时间转换
- (NSString *)showTimeWithValue:(NSTimeInterval)time 
{   
}



//添加一个安排
- (void)addArrange
{
}


#pragma mark  HandleView
- (void)creatDateilView
{

}
// 显示土地信息
- (void)creatDateilInformationView
{

}

- (void)createAdvertisementView 
{ 
}

/*
* 其它协议,委托,数据源方法没有固定顺序,用到了就加到后面
*/


#pragma mark -UITableViewDataSource
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  }


#pragma mark -UITableViewDelegate
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

}

相关文章

Leave a Comment.