java程序员 数据结构_Java程序员:控制结构

java程序员 数据结构

Go (Golang)只有三个基本控制结构。 但是,它们每个都比Java同行更具通用性。

如果

if语句应立即可识别。 它的基本形式与Java中的形式相同,只是条件之间没有括号:

...
if err != nil {
   fmt.Println("An error occurred!")
}
...

但是,Go的版本在两个方面与Java的版本不同。 首先,当if语句的主体仅是一行时,Java允许您省略左花括号和右花括号:

公爵头

...
if(inputString == null) return "null";
...

另一方面,Go对格式良好且可读的代码有强烈的见解(有关更多信息,请参阅下一篇文章)。 Go if语句无论在什么情况下都需要左括号和右括号:

地鼠头

...
if inputString == null {
   return "null"
}
...

其次,Go通过灵活的初始化功能弥补了这一限制。 在if声明本身内部,可以将初始化语句放在条件之前:

...
if err := os.Remove("data.csv"); err != nil {
   fmt.Println("Unable to delete the file 'data.csv'")
}
...

在这里,if语句执行文件删除操作,如果删除失败,则返回一个填充的错误变量。 然后条件检查该值,如果条件为真,则进入if块。

与仅在if语句上方的单独一行上执行文件删除操作相反,为什么要这样做呢? 这种方法的关键特征是在初始化语句中创建的变量的范围仅限于 if

上面的示例代码片段是Go中非常常见的模式,本系列的后续文章将更全面地处理错误处理。 但是,关键是该初始化构造可以创建在if条件之前需要在范围内但在if块之后超出范围的任何变量。

对于

Go中的基本for循环同样类似于其Java对应物。 它包含一个初始化语句,在每次迭代之前要检查的条件以及在每次迭代之后要执行的代码。 唯一的区别是,这三件事没有paretheses:

...
for index := 0; index < 10; index++ {
   fmt.Printf("index == %d", index)
}
...

但是,除了基本版本外,for循环还有其他两种形式。 Go 在Java 中没有 while do 循环控制结构 ,因此其他for循环形式在其位置覆盖了相同的功能。

如果您编写的for语句仅包含条件,而没有初始化或迭代后代码,则它实质上是Java while循环:

...
for len(slice) < maxSize {
   slice = append(slice, getNextItemToAdd())
}
...

当然,您可以通过为初始化和/或迭代后部分插入空语句来对Java for循环执行类似的操作。 但是,严格来说,Java版本始终需要三个部分。 您必须为要用空语句填充的部分插入分号。 在Go中,仅条件构造是一种独特的for循环类型,并且不需要占位符分号。

在第三种for循环形式中,您甚至可以省略条件。 这将创建一个无限循环,需要一个break语句在某个点终止。

地鼠头

...
consoleReader := bufio.NewReader(os.Stdin)
for {
   command, hasMoreInLine, err := bio.ReadLine()
   if err != nil || command == "exit" {
      // The user typed an "exit" command (or something went wrong).  Time to exit this loop!
      break;
   }

   // do something based on the command typed

}
...

最简单的for循环是与Java等效的Go:

公爵头

...
while(true) {
   String command = System.console().readLine();
   if(command.equals("exit")) {
      break;
   }

   // do something based on the command typed

}
...

开关

在Java中,switch语句根据某个变量的值执行一个或多个代码块。 在Java的大部分历史中,尽管Java 7最终添加了对String的支持,但您只能打开基本类型或枚举类型变量。

公爵头

...
switch(deviceType) {
	case "PHONE" :
		renderForPhone();
		break;
	case "TABLET" :
		renderForTablet();
		break;
	case "DESKTOP" :
		renderForDesktop();
		break;
	default :
		System.out.println("Unrecognized device: " + deviceType);
}
...

在Go中,switch语句不仅将变量与可能匹配的列表进行比较。 相反,Go开关可测试多种自由形式的条件。 这些条件可能彼此完全不相关,并且每个条件都可以随您喜欢而复杂。 通过的第一个条件将执行其相应的代码:

地鼠头

...
switch {
   case customerStatus == "DELINQUENT" :
      rejectOrder()
   case orderAmount > 1000 || customerStatus == "GOLD_LEVEL" :
      processOrderHighPriority()
   case orderAmount > 500 :
      processOrderMediumPriority()
   default :
      processOrder()
}

除了灵活的用例条件外,与Java切换的另一个关键区别是Go的版本没有落空。 在Java中,switch语句可能执行多个case块。 如果您没有在case块的末尾放置break语句,那么还将对下一个case条件进行匹配评估。

使用Go,switch语句基本上只是编写一系列杂乱的if-else块的更干净的方法。

结论

if,for和switch关键字与Java关键字极为相似。 但是,它们每个都提供了扩展的灵活性,可帮助您编写更清晰简洁的逻辑。 在Go for Java Programmers系列的下一篇文章中,我们将研究Go格式良好的代码的特定规则。

翻译自: https://www.javacodegeeks.com/2014/03/go-for-java-programmers-control-structures.html

java程序员 数据结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值