OC中goto语句的使用

前言

Objective-C提供了goto语句来执行跳转,这种goto语句功能非常强大,它被称为无条件跳转,但由于goto语句功能太强大,而且这种跳转完全是随心所欲的,因此过度使用goto语句会导致程序的可读性大幅度降低,在此建议尽量少用goto语句

goto语句的使用

goto语法需要在其后面紧跟一个标签,这个标签用于标识goto语句将会跳转到哪里

示例代码:

 	    int i = 0;    // 定义一个循环计数变量
        start :       // start为goto的标签,注意冒号不可少
        NSLog(@"i : %d",i);
        i++;
        if (i < 10) {    // 如果i小于10,再次跳转到start标签处
            goto start;   // 跳转到标签处,即start: 所在的代码行
        }

打印结果:

2016-12-03 13:34:34.236 TestGoto[713:24246] i : 0
2016-12-03 13:34:34.237 TestGoto[713:24246] i : 1
2016-12-03 13:34:34.237 TestGoto[713:24246] i : 2
2016-12-03 13:34:34.237 TestGoto[713:24246] i : 3
2016-12-03 13:34:34.237 TestGoto[713:24246] i : 4
2016-12-03 13:34:34.237 TestGoto[713:24246] i : 5
2016-12-03 13:34:34.237 TestGoto[713:24246] i : 6
2016-12-03 13:34:34.237 TestGoto[713:24246] i : 7
2016-12-03 13:34:34.237 TestGoto[713:24246] i : 8
2016-12-03 13:34:34.238 TestGoto[713:24246] i : 9

比较基本的goto语句的使用,替代for循环。

可以考虑使用goto语句的情况

当我们要从循环体内跳出循环或忽略循环体剩下的语句时——如果只是跳出不带嵌套的循环,或忽略不带嵌套循环的剩下语句,可使用break或continue;但如果要从多层嵌套的内层循环直接跳出外层循环,这就可以考虑使用goto语句,或需要从多层循环的内层循环中忽略本次循环的剩下语句,也可以考虑使用goto语句。
示例代码:

		 for (int i = 0; i < 5; i++) {    // 外层循环
            for (int j = 0; j < 3; j++) {   // 内层循环
                NSLog(@"i的值为:%d, j的值为:%d", i, j);
                if (j >= 1) {
                    goto outer;   // 跳到outer标签处
                }
            }
        }
        outer:    // goto语句跳转处
        NSLog(@"循环结束");

打印结果:

2016-12-03 14:06:48.437 TestGoto[870:34632] i的值为:0, j的值为:0
2016-12-03 14:06:48.438 TestGoto[870:34632] i的值为:0, j的值为:1
2016-12-03 14:06:48.438 TestGoto[870:34632] 循环结束
在if语句中若是使用break或continue语句都只是作用于内层循环,不会影响外层循环;而goto语句则连外层循环也跳过。

结语

尽管实际上goto语句足以替代while循环do...while循环for循环,使用一个goto就“包打天下”了。但再次强调虽然goto语句的功能十分强大,但由于goto语句会大大降低程序的可读性,因此基本上现在的编程语句都推荐尽量少用goto语句

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值