上回我们介绍了package和import的区别,没看过的小伙伴可以点这里那么接下来我们来聊一聊Java 和 Go 在流程控制语句的使用上有一些相似和不同之处:
if-else
相似点
Java 中的 if-else 语法和其他大多数编程语言类似。可以使用 if(){}else{} 或者 if(){}else if(){} 结构来进行多条件判断。
Go 中的 if-else 语法与 Java 基本一致,都是使用关键字 if 和 else。以及 if-else 和 else if 结构来进行多条件判断。
不同点
阅读下面Java代码中的 if-else 语句:
int num = 10;
if (num > 0) {
System.out.println("Number is positive");
} else if (num < 0) {
System.out.println("Number is negative");
} else {
System.out.println("Number is zero");
}
Java 中的条件判断语句要求条件必须是布尔类型。如果条件是非布尔类型,需要使用布尔表达式来进行判断,或者使用特定的方法来进行转换。
在 Java 中,代码块的开始和结束建议使用大括号 {} 包围。即使只有一行语句,也需要使用大括号。对于Java语言的格式要求,建议阅读《阿里巴巴编程规范》使用IDEA的小伙伴直接安装该插件即可
https://raw.githubusercontent.com/alibaba/p3c/HEAD/Java%E5%BC%80%E5%8F%91%E6%89%8B%E5%86%8C(%E9%BB%84%E5%B1%B1%E7%89%88).pdf
再来看看Go 中的 if-else 语句:
package main
import "fmt"
func main() {
num := 10
if num > 0 {
fmt.Println("Number is positive")
} else if num < 0 {
fmt.Println("Number is negative")
} else {
fmt.Println("Number is zero")
}
}
细心的小伙伴会发现
- 在 Go 中,条件判断语句不需要使用括号 () 包围条件表达式。
除此之外
- 在 Go 语言中,可以在 if 语句中添加一个条件初始化语句。这个特性允许你在 if 语句中声明一个局部变量,并且该变量的作用范围仅限于 if 语句块内部。这种语法的形式是在条件语句之前声明变量,然后在条件判断中使用这个变量。这种设计的目的是为了提高代码的可读性和简洁性。例如:
package main
import "fmt"
func main() {
if num := 10; num > 0 {
fmt.Println("Number is positive:", num)
} else {
fmt.Println("Number is non-positive")
}
// 下面这行代码会导致编译错误
// fmt.Println(num)
}
注意!!!
在 Go 语言中,没有像其他一些编程语言(比如 C/C++、Java、JavaScript 等)中常见的三目运算符 condition expr1 : expr2
。尽管没有三目运算符,但使用 if-else
语句来进行条件判断是一种更加常见和推荐的做法。
//Go语言实现
package main
import "fmt"
func main() {
num := 10
var result string
if num > 0 {
result = "positive"
} else {
result = "non-positive"
}
fmt.Println("Number is", result)
}
//Java实现
public class Main {
public static void main(String[] args) {
int num = 10;
String result = num > 0 "positive" : "non-positive";
System.out.println("Number is " + result);
}
}
总体而言,Java 和 Go 中的 if-else 语句在语法上有些许差异,但在基本功能和用法上是相似的。在使用时,需要注意语言本身的特点和语法规则。
switch
相似点
Java 中的 switch 语句和其他编程语言类似,用于根据不同的条件执行不同的代码块。
可以在 switch 语句中使用整数、字符、枚举和字符串等类型进行匹配。
不同点
Java 中的 switch 语句
在 Java 中,每个 case 后面需要使用 break 关键字来终止该 case,否则会继续执行下一个 case 或 default。
Java 中的 switch 语句只能匹配整数、字符、枚举和字符串等有限类型,不支持其他复杂类型。
public class Main {
public static void main(String[] args) {
int num = 2;
String dayString;
switch (num) {
case 1:
dayString = "Monday";
case 2:
dayString = "Tuesday";
case 3:
dayString = "Wednesday";
default:
dayString = "Invalid day";
}
//由于没有break中断,最后的输出结果是"Invalid day"
System.out.println("Day: " + dayString);
}
}
Go 中的 switch-case 语句:
Go 中的 switch-case 语句的 case 语句不需要显式地使用 break 关键字,默认情况下,Go 会在执行完一个 case 后自动终止。如果你需要穿透这个功能,那就手动添加 fallthrough
Go 中的 switch-case 语句还支持多个表达式的匹配,而不仅限于常量。下面这种写法就是将switch当初if - else if - else 来用
package main
import "fmt"
func main() {
num := 10
switch {
case num > 0:
fmt.Println("Number is positive")
fallthrough
case num < 0:
fmt.Println("Number is negative")
default:
fmt.Println("Number is zero")
}
}
//输出结果是
//Number is positive
//Number is negative
不仅如此,也可以用switch来匹配数值,此时case后面还能接变量甚至是函数:
package main
import "fmt"
func main() {
num := 10
switch num {
case getNum(): //会执行getNum()获取返回值,进行匹配
fmt.Println("Number is positive:", num)
default:
fmt.Println("Number is zero")
}
}
func getNum() int { return 10 }
同理,也可以在switch后面初始化变量
package main
import "fmt"
func main() {
switch num := 10; num {
case getNum(): //会执行getNum()获取返回值,进行匹配
fmt.Println("Number is positive:", num)
default:
fmt.Println("Number is zero")
}
}
func getNum() int { return 10 }
总结
在本文中,我们深入探讨了 Java 和 Go 语言在条件控制流程上的异同。无论是 if-else 还是 switch 语句,每种语言都有其独特的特性和优势。
来选择合适的控制流结构。如果条件较为简单,且不涉及大量的条件分支,那么使用 if-else 结构可能更合适。而在需要匹配多个条件且条件较多时,switch 结构会更加清晰易读。
无论是 Java 还是 Go,良好的代码风格和逻辑清晰度是保证代码可维护性和可读性的关键。因此,我们应该根据实际情况灵活运用不同的控制流结构,以编写出高效、清晰的代码,从而提升开发效率和代码质量。