如何避免嵌套if语句实现两个路径文件的优先级打开?
实现方案
以下两种方式均满足「第一个路径可打开就不检查第二个路径」的要求,无嵌套if、无需goto、不新增多余布尔标记:
路径数组循环遍历(扩展性最优,后续增加备选路径无需修改核心逻辑)
按优先级排列所有备选路径,顺次尝试,首个可打开的路径直接终止遍历,无嵌套判断:// 按优先级排列备选路径 file_paths = ["/path1/file.txt", "/path2/file.txt"] file_descriptor = null for (path in file_paths) { file_descriptor = open(path) // 当前路径打开成功,直接跳出循环,不会尝试后续路径 if (file_descriptor.open()) { break; } print("failed to open file at " + path); } // 所有路径尝试完毕后,判断是否拿到可用文件描述符 if (!file_descriptor || !file_descriptor.open()) { print("all paths failed. exiting."); return false; } read_file(file_descriptor); return true;该方案仅复用已有的
file_descriptor变量做最终校验,没有新增布尔类标记变量。公共逻辑抽离 + 卫语句顺次返回(改动最小,适配现有代码结构)
把打开文件后的读逻辑封装为独立函数,每尝试一个路径成功就直接调用函数返回,所有判断均为平级无嵌套:filepath1 = "/path1/file.txt" filepath2 = "/path2/file.txt" // 封装打开成功后需执行的通用逻辑 function handle_valid_file(file_desc) { read_file(file_desc); return true; } // 先尝试第一个路径,成功直接返回,不会执行后续判断 file_descriptor = open(filepath1); if (file_descriptor.open()) { return handle_valid_file(file_descriptor); } print("file 1 did not work"); // 第一个路径失败再试第二个,失败直接返回 file_descriptor = open(filepath2); if (!file_descriptor.open()) { print("could not open file 2. exiting."); return false; } return handle_valid_file(file_descriptor);
内容的提问来源于stack exchange,提问作者leengi
相关产品推荐
相关产品推荐

