You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart中能否基于数值范围使用Switch语句?附示例代码

在Dart中基于数值范围实现分支判断的方案

嘿,好问题!Dart的原生switch语句不支持直接用200..300这种范围语法作为case条件,你写的示例代码会直接报错。不过咱们有几种实用的替代方案,能达到你想要的范围分支判断效果,我给你梳理一下:

方案1:Dart 3.0+ 用模式匹配的范围条件(推荐)

Dart 3.0及以上版本引入了模式匹配特性,支持直接在switch的case里写范围判断条件,写法非常直观:

String handleResponseStatusCode(int statusCode) {
  switch (statusCode) {
    case >= 200 && <= 299:
      return "OK";
    case >= 400 && <= 499:
      return "Error";
    default:
      return "Unknown status";
  }
}

方案2:兼容低版本Dart的when子句写法

如果你还在使用Dart 3.0以下的版本,可以用switch的when子句来实现范围判断,本质是给case加一个条件过滤:

String handleResponseStatusCode(int statusCode) {
  switch (statusCode) {
    case final code when code >= 200 && code < 300:
      return "OK";
    case final code when code >= 400 && code < 500:
      return "Error";
    default:
      return "Unknown status";
  }
}

方案3:用if-else链实现(更直观的场景)

如果你的分支逻辑不算特别复杂,用if-else链反而会更简洁易懂,不需要纠结switch的语法限制:

String handleResponseStatusCode(int statusCode) {
  if (statusCode >= 200 && statusCode < 300) {
    return "OK";
  } else if (statusCode >= 400 && statusCode < 500) {
    return "Error";
  } else {
    return "Unknown status";
  }
}

方案4:封装扩展方法提升复用性

如果需要在多个地方复用这种范围判断逻辑,可以把判断规则封装成扩展方法,让代码更整洁:

extension StatusCodeChecker on int {
  bool get isSuccess => this >= 200 && this < 300;
  bool get isClientError => this >= 400 && this < 500;
}

String handleResponseStatusCode(int statusCode) {
  switch (statusCode) {
    case final code when code.isSuccess:
      return "OK";
    case final code when code.isClientError:
      return "Error";
    default:
      return "Unknown status";
  }
}

另外补充一下:你提到的clamp方法主要作用是将数值限制在指定范围内并返回该数值,比如statusCode.clamp(200, 300)会把超出范围的数值修正到200或300,它并不能帮我们实现分支判断,所以确实不适用这个场景。

内容的提问来源于stack exchange,提问作者Eike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:52:15