Java 与 Go:关键字对比与解析(2)

上回我们介绍了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,良好的代码风格和逻辑清晰度是保证代码可维护性和可读性的关键。因此,我们应该根据实际情况灵活运用不同的控制流结构,以编写出高效、清晰的代码,从而提升开发效率和代码质量。

需要免费使用IDEA的小伙伴可以关注公众号【AIGoland之星】回复【idea】领取最新且免费的激活工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值