1. 概述

这是一个经典的编程小问题:如何判断一个整数是奇数还是偶数。在 Kotlin 中,我们可以通过取模运算(modulo operation)来轻松解决这个问题。核心思路是利用对 2 取余的结果:如果余数为 0,则是偶数;否则为奇数。

本文将重点讲解 Kotlin 中的 rem() 运算符及其使用方式,并通过实际代码示例展示如何高效实现奇偶判断。✅ 掌握这个技巧虽然简单,但在日常开发中频繁出现,比如分页、循环渲染、状态切换等场景,踩坑多了就会发现写个工具函数真的很有必要。

2. rem 运算符详解

Kotlin 提供了取余操作符 %,底层对应的是 rem() 函数。和 Java 类似,x % y 实际上会被编译器翻译成 x.rem(y),这是 Kotlin 运算符重载机制的一部分。⚠️ 注意:Kotlin 1.1 版本之前曾使用 mod 表示该操作,但从 1.1 开始统一改为 rem(),以更准确地反映其行为(详见更新日志)。

2.1 取模运算基础

先看几个典型的取余例子,确保理解其数学含义:

@Test
fun `Given the remainder function, assertions on the remainder should pass`() {
  assertTrue(10 % 4 == 2)
  assertTrue(25 % 5 == 0)
  assertTrue(24 % 5 == 4)
  assertTrue(100 % 20 == 0)
}

这些测试验证了基本的取余逻辑 —— 结果就是整除后剩下的部分。

2.2 判断奇偶性的实现

定义两个测试变量:

val a = 42
val b = 25

判断逻辑如下:

  • n % 2 == 0 → 偶数 ✅
  • n % 2 == 1 → 奇数 ❌

应用到具体数值:

@Test
fun `Given odd or even numbers should get the right response from rem`() {
  val a = 42
  val b = 25

  val aRem2 = a % 2
  val bRem2 = b % 2
  val isAEven: Boolean = aRem2 == 0
  val isBEven: Boolean = bRem2 == 0

  assertTrue(isAEven)
  assertFalse(isBEven)
}

基于此,我们可以封装两个简洁的工具函数:

fun isEven(value: Int) = value % 2 == 0
fun isOdd(value: Int) = value % 2 == 1

接着编写单元测试验证其正确性:

@Test
fun `Given odd and even values the isEven function should answer correctly`() {
  assertTrue(isEven(2))
  assertTrue(isEven(4))
  assertTrue(isEven(6))

  assertFalse(isEven(1))
  assertFalse(isEven(3))
}

@Test
fun `Given odd and even values the isOdd function should answer correctly`() {
  assertTrue(isOdd(1))
  assertTrue(isOdd(3))
  assertTrue(isOdd(5))

  assertFalse(isOdd(2))
  assertFalse(isOdd(4))
}

这两个扩展函数足够轻量,可以直接放入项目通用工具类中复用。如果你追求更优雅的 API,也可以考虑将其作为 Int 的扩展函数:

inline val Int.isEven: Boolean get() = this % 2 == 0
inline val Int.isOdd: Boolean get() = this % 2 != 0

这样调用时就变成了 42.isEven25.isOdd,语义更清晰,DSL 感更强。

3. 总结

本文介绍了 Kotlin 中的 rem() 操作及其对应的 % 符号,展示了如何通过取模 2 来判断整数的奇偶性。我们从基础运算出发,逐步封装出可复用的函数,并强调了其在实际编码中的实用性。

文中所有代码示例均可在 GitHub 获取:https://github.com/Baeldung/kotlin-tutorials/tree/master/core-kotlin-modules/core-kotlin-numbers-2


原始标题:Check if a Number Is Odd or Even in Kotlin