문제

I'm wondering how to write the if statement in the following block in a better way. It's supposed to operate when $a is 14, 22, 30 and for all following values at intervals of 8, up to some limit. The current way is obviously not good since the action must be performed each time that periodic pattern is fulfilled, and this would require many, many OR operators.

if($a == 14 || $a == 22 || $a == 30 || $a == 38 || $a == 46... until some number){
    do something...
}
도움이 되었습니까?

해결책

if($a % 8 == 6 && $a >= 14 && a <= some_number)

In general, if you want periodicity, think modulus.

다른 팁

If your test values are not in any specific sequence (are not powers or two, not all even, not all odd, etc) you can use a lookup table to avoid the long if chains:

int test_values[] = { 14, 22, 30, 38, 46, ... };

for (i = 0; i < test_values.length; i++)
{
    if (input == test_values[i])
    {
        do something...
    }
}

This way it is also very easy to add more values by just expanding the array. The array of cases can also be initialized from an external config file.

In Python this is fairly descriptive:

if a in range(14, some_number, 8):
    do something
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 softwareengineering.stackexchange
scroll top