代码之家  ›  专栏  ›  技术社区  ›  Chuck Le Butt

我应该避免一长串IF语句吗?

  •  0
  • Chuck Le Butt  · 技术社区  · 13 年前

    我应该避免在代码中有一长串序列化的IF语句吗?有时这似乎是不可避免的,但我想知道这是否只是我的经验不足。

    例如,如果您正在处理用户上传的图像,并且您希望对任何错误给出准确的反馈,那么您可能会遇到以下情况:

    if($file["size"] == 0) { 
        throw new Exception("ERROR: File was empty");
    }
    
    if (($file["type"] != "image/gif")
    || ($file["type"] != "image/jpeg")
    || ($file["type"] != "image/pjpeg")
    || ($file["type"] != "image/png")) {
        throw new Exception("ERROR: Image must be either GIF, PNG or JPEG!");
    }
    
    if ($file["size"] > 2000000) {
        throw new Exception("ERROR: Image must be than less 2MB!");
    }
    
        if ($file["error"] > 0) {
        throw new Exception("UNKNOWN ERROR: ".$file['error']);
    }
    
    $imgDetails = getimagesize($file["tmp_name"]);
    
    if($imgDetails['channels'] != 3){
        throw new Exception("ERROR: Image must be RGB.)";
    }
    
    if($imgDetails['0'] < 50 && $imgDetails['1'] < 50) {
        throw new Exception("ERROR: Image must be larger then 50 x 50.)";           
    }
    

    等等。直到最终文件通过所有测试并被处理。

    这是“不良做法”吗?

    3 回复  |  直到 13 年前
        1
  •  1
  •   datasage    13 年前

    你可以使用 in_array 以缩短类型检查,但通常这是一种很好的形式,除了将输出直接从该函数中推出之外。如果这是通过类完成的,那么您可能希望使用Exceptions,而不是直接推送错误输出。

    早点回来,经常回来。

        2
  •  0
  •   Community Mohan Dere    9 年前

    您可以创建一个限制集合,并编写一个代码来查看该集合,而不是列出任意的限制。

    虽然我忘记了在javascript中执行此操作的方法,但类似于 How do I check if an array includes an object in JavaScript?

    希望这能有所帮助>

        3
  •  0
  •   MrLeap    13 年前

    我发现,通常你所说的那种if链可以变形为函数的哈希图,用一些选择器作为它们的键。

    如果你有一个哈希图,就像 $processImage = { "image/gif" => function processGIF(){blah} } 您可以访问O(1)中的每个函数,而不是O(n/2)平均值(假设调用的正态分布也是不准确的)。你知道,无可否认,这并不重要,除非它经常发生。

    然后您可以使用调用该函数 $processImage["image/gif"](); (我认为这是有效的语法,近年来我做的JS比php多得多。)

    不过,我确实发现hashmap方法具有很强的可扩展性和可读性,所以它就是这么做的。

    当然,重构这些是有好处的。。但在许多情况下,这样做的好处是微乎其微的。

    推荐文章