byłaby moją jeśli kod oświadczenie

głosy
1

Byłem pałować z tego kawałka kodu przez ponad godzinę próbując zmienić go na różne sposoby. Czy jest jakiś prostszy sposób, aby ją napisać?

   if x is not Number      ;// if x is string
   {
      if y is not Number      ;// x, y both strings
      {
         Eval(x)
         Eval(y)
         return
      }
      else                    ;// x is string, y is Number
      {
         Eval(x)
         Scale(y)
         return
      }
   }
   else if y is not Number    ;// x is Number, y is string
   {
      Scale(x)
      Eval(y)
      return
   }
   else                       ;// both are numbers
   {
      Scale(x)
      Scale(y)
      return   
   }
Utwórz 26/08/2010 o 08:59
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
7

Wygląda jak chcesz Evalłańcuchów i Scaleliczb. Zamiast czterech wyraźnych przypadków (które staną się osiem z trzech zmiennych), uchwyt dla każdego przypadku xi yniezależnie:

if x is Number
    Scale(x)
else
    Eval(x)

if y is Number
    Scale(y)
else
    Eval(y)

Albo, jeszcze lepiej, można nacisnąć Eval/ Scalew sposób użytkowy:

ScaleOrEval(z):
    if z is Number
        Scale(z)
    else
        Eval(z)

... a następnie używać go ...

ScaleOrEval(x)
ScaleOrEval(y)

Jeśli wybierzesz dobre nazwy metod, a następnie tworząc metodę użytkowej sprawia, że ​​kod jest bardziej czytelny i pozwala uniknąć kopiowania i wklejania powtórzeń.

Odpowiedział 26/08/2010 o 09:04
źródło użytkownik

głosy
2
// First handle x
if x is Number
{
    Scale(x)
}
else
{
    Eval(x)
}

// Then handle y
if y is Number
{
    Scale(y)
}
else
{
    Eval(y)
}

return
Odpowiedział 26/08/2010 o 09:04
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more