从RangeError(index)返回空值的Dart最佳做法

lymnna71  于 2022-12-06  发布在  其他
关注(0)|答案(3)|浏览(152)

以下哪项是返回null的最佳实践:
未行程的例外状况:范围错误(索引):无效值:不在0..2范围内
我的代码:

late final int? element;
try {
  element = l[index];
} catch(e) {
  element = null;
}

正在寻找更短的一行程序解决方案。
类似于:

final element = l[index] ?? null;
j2qf4p5b

j2qf4p5b1#

错误的最佳实践是不引发错误。
在这种情况下,我会这样做:

final T? element = (index >= 0 && index < l.length) ? l[index] : null;

不需要late,不会引发或捕获错误。
如果一个错误被抛出,它可能是程序中的一个 * 真实 * 错误。如果您捕获并忽略了您预期的错误,您可能也捕获了您没有预期的错误,并隐藏了真实的问题。这就是捕获错误作为"正常控制流"的一部分不受欢迎的真正原因。这也是为什么你应该总是从API抛出(并记录)精确的异常类型,这样用户就可以进行精确的捕获。

lyr7nygr

lyr7nygr2#

希望这个答案能让你满意。:)

final int? element = (index == null || index.clamp(0,l.length - 1) != index) ? null : l[index];
nlejzf6q

nlejzf6q3#

您可以使用extension method

我的扩展名.dart

extension NullableList<T> on List<T> {
      T? nullable(int index){
        T? element;
        try {
          element = this[index];
        } catch(_) {
        }
        return element;
      }
    }

使用它:

主页.dart

List<int> l = [1];
  int? result = l.nullable(3);
  print(result); //--> null
  print(l.nullable(0)); //--> 1

相关问题