什么是标示符

  • 日常生活中得标识符

    • (img)
    • 乔布斯/乔丹/陈冠希这些都是标识符
  • 标识符就是程序员自己在程序中起的一些名字。

    • 首先要明确的是,程序员自己起的名字,肯定是不能使用和关键字同名的名字。

2. 标识符的作用

  • 标识符,从字面上理解就是用来标识某些东西的符号,标识的目的就是为了将这些东西区分开来

  • 其实标识符的作用就跟人类的名字差不多,为了区分每个人,就在每个人出生的时候起了个名字

  • C语言是由函数构成的,一个C程序中可能会有多个函数,为了区分这些函数,就给每一个函数都起了个名称。函数的名称就是标识符的一种。除了函数,以后还会学到“变量”这个概念,变量的名称也是标识符


3.标识符命名规则

  • 1.只能由26个英文字母的大小写、10个阿拉伯数字0\~9、下划线_组成
  • 2.严格区分大小写,比如test和Test是2个不同的标识符
  • 3.不能以数字开头
  • 4.不可以使用关键字作为标识符

4.练习

fromNo12
my_Boolean
Obj2
lnj
Mike2jack
_test
haha(da)tt
jack_rose
GUI

@: 2

标示符命名规范

本小节知识点:

  1. 【理解】标识符命名规范
  2. 【了解】标示符命名规范详述
  3. 【了解】其它标示符命名规范

1.标识符命名规范

  • 命名规范:

    • 起一个有意义名字,能够��高代码的可读性
    • 驼峰命名(除开第一个单词后面每个单词首字母大写)
    • (img)
    • (img)

2.标示符命名规范详述

  • 驼峰命名法(Camel-Case)是电脑程序编写时的一套命名规则(惯例):

    • 程序员们为了自己的代码能更容易的在同行之间交流,所以才取统一的可读性比较好的命名方式。

      • 例如:有些程序员喜欢全部小写,有些程序员喜欢用下划线,所以如果要写一个my name的变量,他们常用的写法会有myname、my_name、MyName或者myName。这样的命名规则不适合所有程序员阅读,而利用驼峰命名法来表示,可以增加程序可读性。
    • 驼峰命名法就是当变量名或函数名是由一个或多个单字连结在一起,而构成的唯一识别字时,第一个单字以小写字母开始,第二个单字的首字母大写;或每一个单字的首字母都采用 大写字母

      • 例如:myFirstName、myLastName,这样的变量名看上去就像骆驼峰一样此起彼伏,故得名。
    • 驼峰命名法(Camel-Case)一词来自 Perl 语言中普遍使用的大小写混合格式,
      而 Larry Wall 等人所著的畅销书《Programming Perl》(O~'~Reilly 出版)的封面图片正 是一匹骆驼。 驼峰命名法的命名规则可视为一种惯例,并无绝对与强制,为的是增加识别和可读 性。

  • 不按照规范的后果

    • (img)

3.其它标识符命名规范

  • 命名应当直观且可以拼读,要望文知意,便于记忆和阅读。

    • 标识符最好采用英文单词或其组合,不允许使用拼音。程序中的英文单词一般不要太复杂, 用词应当准确。
  • 命名的长度应当符合“min-length && max-information”原则。

    • C 是一种简洁的语言, 命名也应该是简洁的。例如变量名MaxVal 就比 MaxValueUntilOverflow 好用。标识符的长度一般不要过长,较长的单词可通过去掉“元音”形 成缩写。
    • 另外,英文词尽量不缩写,特别是非常用专业名词,如果有缩写,在同一系统中对同一单词必 须使用相同的表示法,并且注明其意思。
    • 大多数ANSI编译程序允许有至多31个有效字符。也就是说,只有变量名或函数名的前31个字符 的唯一性会被检查,其余的字符将被忽略掉。
    • 比如: PrintOutAllTheClientsMonthEndReports(); prt_rpts();
  • 当标识符由多个词组成时,建议采用“驼峰命名法”。

    • 比如:int CurrentVal;这样的名字看起来比较清晰,远比一长串字符好得多。
  • 尽量避免名字中出现数字编号,如Value1,Value2 等,除非逻辑上的确需要编号。

    • 比如驱动开发时为管脚命名,非编号名字反而不好。 初学者总是喜欢用带编号的变量名或函数名,这样子看上去很简单方便,但其实是一颗颗定时炸 弹。这个习惯初学者一定要改过来。
  • 对在多个文件之间共同使用的全局变量或函数要加范围限定符

    • (建议使用模块名(缩写)作为范围限定符)。(GUI_ ,etc)标识符的命名规则
  • 标识符名分为两部分:规范标识符前缀(后缀) + 含义标识。

    • 非全局变量可以不用使用范围限定符前缀。

@: 3

注释基本概念

本小节知识点:

  1. 【掌握】什么是注释
  2. 【了解】为什么要使用注释?
  3. 【了解】应用注释的目的和应用场景
  4. 【理解】注释的特点

1.什么是注释

  • 注释是在所有计算机语言中都非常重要的一个概念,从字面上看,就是注解、解释的意思

  • 注释可以用来解释某一段程序或者某一行代码是什么意思,方便程序员之间的交流。假如我写完一行代码后,加上相应的注释,那么别人看到这个注释就知道我的这行代码是做什么用的

  • 注释可以是任何文字,也就是说可以写中文
  • 在开发工具中注释一般是绿色

江哥提示:
” >+ 初学者编写程序可以养成习惯:先写注释再写代码。
” >+ 将自己的思想通过注释先整理出来,在用代码去体现。
” >+ 因为代码仅仅是思想的一种体现形式而已。


2.为什么要使用注释?

  • 新浪微博表情键盘”其中一个”文件代码
~~ typedef enum{
~~     HMToolBarBtnTypeNear = 100,
~~     HMToolBarBtnTypeNormal,
~~     HMToolBarBtnTypeEmoji,
~~     HMToolBarBtnTypeLXH
~~ }HMToolBarBtnType;
~~
~~ @interface HMEmoticonsController ()<UICollectionViewDataSource, UICollectionViewDelegate>
~~ @property (weak, nonatomic) IBOutlet UICollectionViewFlowLayout *layout;
~~ @property (weak, nonatomic) IBOutlet UICollectionView *emoticonView;
~~ - (IBAction)emoticonToolbarClick:(UIBarButtonItem *)sender;
~~ @end
~~
~~ @implementation HMEmoticonsController
~~
~~ - (void)viewDidLoad {
~~     [super viewDidLoad];
~~     NSUInteger col = 7;
~~     NSUInteger row = 3;
~~     NSUInteger margin = 10;
~~     CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;
~~     CGFloat emoticonWidth = (screenWidth - (col + 1) * margin) / col;
~~     CGFloat emoticonHeight = emoticonWidth;
~~     self.layout.itemSize = CGSizeMake(emoticonWidth, emoticonHeight);
~~     self.layout.minimumInteritemSpacing = margin;
~~     self.layout.minimumLineSpacing = margin;
~~     self.layout.sectionInset = UIEdgeInsetsMake(margin, margin, margin, margin);
~~     self.layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
~~     self.emoticonView.pagingEnabled = YES;
~~ }
~~ - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
~~ {
~~     return [HMEmoticonsManager shareManager].emotionSections.count;
~~ }
~~
~~ - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
~~ {
~~     HMEmoticonSection *categoryScetion = [HMEmoticonsManager shareManager].emotionSections[section];
~~     return categoryScetion.emoticons.count;
~~ }
~~ - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
~~ {
~~     HMEmoticonCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:[HMEmoticonCell identifier] forIndexPath:indexPath];
~~      HMEmoticonSection *categoryScetion = [HMEmoticonsManager shareManager].emotionSections[indexPath.section];
~~     HMEmoticon *emoticon = categoryScetion.emoticons[indexPath.item];
~~     cell.emoticon = emoticon;
~~     return cell;
~~ }
~~
~~ #pragma mark - UICollectionViewDelegate
~~ - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
~~ {
~~     HMEmoticonSection *categoryScetion = [HMEmoticonsManager shareManager].emotionSections[indexPath.section];
~~     HMEmoticon *emoticon = categoryScetion.emoticons[indexPath.item];
~~     HMEmoticonSection *nearSection = [HMEmoticonsManager shareManager].emotionSections[0];
~~     BOOL contain = NO;
~~     for (HMEmoticon *oldEmoticon in nearSection.emoticons) {
~~         if ([oldEmoticon.chs isEqualToString:emoticon.chs] ||
~~             [oldEmoticon.emoji isEqualToString:emoticon.emoji]) {
~~             contain = YES;
~~             break;
~~         }
~~     }
~~     if (!contain) {
~~         [nearSection.emoticons removeObjectAtIndex:nearSection.emoticons.count - 2];
~~         [nearSection.emoticons insertObject:emoticon atIndex:0];
~~         [self.emoticonView reloadData];
~~     }
~~     if ([self.delegate respondsToSelector:@selector(emoticonsController:emoticon:)]) {
~~         [self.delegate emoticonsController:self emoticon:emoticon];
~~     }
~~ }
~~
~~ - (IBAction)emoticonToolbarClick:(UIBarButtonItem *)sender
~~ {
~~     NSUInteger count = 0;
~~     // Emoji = 2
~~     for (int i = 0; i < sender.tag; i++) { // 0 1
~~         NSNumber *currentSectionCount = [HMEmoticonsManager shareManager].categroySections[i];
~~         count += currentSectionCount.intValue; // 7
~~     }
~~     CGRect rect = self.emoticonView.frame;
~~     rect.origin.x = count * rect.size.width;
~~     [self.emoticonView scrollRectToVisible:rect animated:YES];
~~ }
~~ 
  • 阅读性差

3.应用注释的目的和应用场景

  • 常见用法一(解释代码):
~~ - (UIBarButtonItem *)initWithNorImage:(NSString *)norimage higImage:(NSString *)higImage title:(NSString *)title target:(id)target action:(SEL)action
~~ {
~~     // 1.创建一个按钮
~~     UIButton *btn = [[UIButton alloc] init];
~~     // 2.设置按钮的默认图片和高亮图片
~~     if (norimage != nil &&
~~         ![norimage isEqualToString:@""]) {
~~         // 图片不为空
~~         [btn setImage:[UIImage imageNamed:norimage] forState:UIControlStateNormal];
~~     }
~~     if (higImage != nil &&
~~         ![higImage isEqualToString:@""]) {
~~         // 图片不为空
~~         [btn setImage:[UIImage imageNamed:higImage] forState:UIControlStateHighlighted];
~~     }
~~     // 设置标题
~~     [btn setTitle:title forState:UIControlStateNormal];
~~
~~     // 3.监听按钮的点击事件
~~     [btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
~~     // 4.设置按钮的frame
~~     // 可以调用控件的sizeToFit方法来自动调整控件的大小
~~     [btn sizeToFit];
~~
~~     // 5.根据按钮创建BarButtonItem
~~     return [[UIBarButtonItem alloc] initWithCustomView:btn];
~~ }
  • 常见用法二(做函数说明):
~~ /**
~~  *  创建item
~~  *
~~  *  @param norimage 默认状态的图片
~~  *  @param higImage 高亮状态的图片
~~  *  @param title    标题
~~  *
~~  *  @return 创建好的item
~~  */
~~ - (UIBarButtonItem *)initWithNorImage:(NSString *)norimage higImage:(NSString *)higImage title:(NSString *)title target:(id)target action:(SEL)action
~~ {
~~     // 1.创建一个按钮
~~     UIButton *btn = [[UIButton alloc] init];
~~     // 2.设置按钮的默认图片和高亮图片
~~     if (norimage != nil &&
~~         ![norimage isEqualToString:@""]) {
~~         // 图片不为空
~~         [btn setImage:[UIImage imageNamed:norimage] forState:UIControlStateNormal];
~~     }
~~     if (higImage != nil &&
~~         ![higImage isEqualToString:@""]) {
~~         // 图片不为空
~~         [btn setImage:[UIImage imageNamed:higImage] forState:UIControlStateHighlighted];
~~     }
~~     // 设置标题
~~     [btn setTitle:title forState:UIControlStateNormal];
~~
~~     // 3.监听按钮的点击事件
~~     [btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
~~     // 4.设置按钮的frame
~~     // 可以调用控件的sizeToFit方法来自动调整控件的大小
~~     [btn sizeToFit];
~~
~~     // 5.根据按钮创建BarButtonItem
~~     return [[UIBarButtonItem alloc] initWithCustomView:btn];
~~ }

4.注释的特点

  • 注释是写给人看的,不是给计算机看的。计算机怎么可能看得我们写的中文。因此当编译程序的时候,并不会将注释编译到.o目标文件中
  • 从.o文件的大小可以间接看出注释后的代码并没有被编译
  • 检查代码的作用
  • 排除错误

C for ios --- 标识符与注释相关推荐

  1. C语言关键字、标识符和注释

    一.关键字 C语言提供的有特殊含义的符号,共32个. 在Xcode中关键字全部高亮显示,关键字全部都为小写.如return.int等. 二.标识符 定义:标识符是程序员在程序中自定义的一些符号和名称. ...

  2. iOS_03_关键字、标识符、注释

    一.学习语法之前的提醒 1. C语言属于一门高级语言,其实,所有高级语言的基本语法组成部分都一样,只是表现形式不太一样. 2. 就好像亚洲人和非洲人,大家都有人类的结构:两只手.两只脚.一个头,只是他 ...

  3. C语言第三节关键字、标识符、注释

    学习语法之前的提醒 C语言属于一门高级语言,其实,所有高级语言的基本语法组成部分都是一样的,只是表现形式不太一样 就好像亚洲人和非洲人,大家都有人类的结构:2只 手.2只脚.1个头,只是他们外表不太一 ...

  4. Ada语言-标识符和注释

    标识符 1,ada标识符是不区分大小写的,如下所示它们指向的都是同一个标识符: 2, 全以字母开头,如下: 3,以字母或数字结尾,如下: 4,可以'包含'不连续的下划线,如下: 注释 注意:在Ada中 ...

  5. 【iOS工具】注释插件 VVDocumenter-Xcode 的安装使用及误点击“Skip Bundle”的解决办法!...

    一.前言 VVDocumenter-Xcode 注释插件是由 @onevcat 大神开发的一个Xcode注释插件,其作用是在Xcode中输入 "///" 后自动生成规范的文档注释, ...

  6. iOS:Tools:快速注释Doxygen

    Xcode5有个新特性就是自己定义的函数也会被检测集成到代码提示里面,也就是在Quick Help有提示.如 /*** @brief 设置id** @param id 要设置的id*/ +(void) ...

  7. iOS过滤json注释字段

    过滤并清除json中的注释字段 我们的后台习惯在接口文档的json示例中直接添加注释,有时候测试环境不满足条件无法测试某部分数据,使用接口文档中的json直接转换成模拟数据就相当方便,但是注释和一些不 ...

  8. 注释 标识符 关键字

    注释 标识符 关键字 注释 public class helloworld {public static void main(String[] args) {//输出一个hellowworldSyst ...

  9. 随笔分类 - 零基础学习iOS开发

    随笔分类 - 零基础学习iOS开发 不管你是否涉足过IT领域,只要你对iOS开发感兴趣,都可以阅读此专题. [零基础学习iOS开发][02-C语言]11-函数的声明和定义 摘要: 在上一讲中,简单介绍 ...

最新文章

  1. 第三代测序之Pacific Biosciences
  2. 这位院士,获一次性奖励2500万!
  3. C语言及程序设计进阶例程-32 位运算及其应用
  4. LeetCode之Find All Numbers Disappeared in an Array
  5. Java对象容器——List
  6. 计算机任务管理器恢复默认,关于任务管理器的一个问题??
  7. Vim自动补全插件-NeoComplCache
  8. JavaScript相关技术学习
  9. 水滴IP教你如何查询QQ好友的IP地址
  10. redis集群的远程管理与监控
  11. 一文读懂javascript深拷贝与浅拷贝
  12. Account-login
  13. 领秀d8 android4.5 root,Root神器重大更新 KingRoot V4.5发布
  14. 工控安全与传统安全区别
  15. ASEMI可控硅模块MTC110-16为何能得到大家的青睐
  16. android studio迁移,AndroidStudio 一键迁移至 AndroidX
  17. VsCode+OpenOCD 开发stm32系列
  18. 微信小程序云数据库中实现分页
  19. react 路由重定向_如何测试与测试库的路由器重定向React
  20. 先验后验与贝叶斯定理

热门文章

  1. 华测RTK参数/华测GPS/华测RTK/华测RTK什么型号信号好
  2. hadoop概述-包括各个组件
  3. 基于单片机的消毒柜控制仿真设计(#0030)
  4. VMware的使用及配置虚拟网络
  5. DS||简单扑克牌游戏(一)
  6. c语言实现带加减乘除以及单元函数的计算器
  7. windows和android平板,说一说安卓,苹果,和Windows平板的差别,看到好多人纠结
  8. RS485多机通信程序(终结版AVR)
  9. 物理学和天文学的最新进展
  10. 以太坊学习笔记(一)——免费获得测试ETH