Benim ise ifadesi kodunu refactor

oy
1

Bir saat o farklı yollar yeniden düzenlemek için çalışıyor üzerindekiler için bu kod bit karıştırmasını oldum. Bunu yazmak için daha kolay bir yolu var mı?

   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   
   }
Oluştur 26/08/2010 saat 08:59
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
7

Eğer istediğiniz gibi görünüyor Evaldizeleri ve Scalesayıları. Bunun yerine (sekiz üç değişkenlerle duruma gelecektir) dört açık vakaları sahip, her durumda idare xve ybağımsız:

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

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

Ya da daha iyisi, zorlayabilir Eval/ Scalebir yardımcı yöntem haline:

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

... sonra da kullanmaya ...

ScaleOrEval(x)
ScaleOrEval(y)

Eğer iyi bir yöntem adlarını seçerler, o zaman bir yardımcı yöntem oluşturma kodu daha okunabilir hale getirir ve kopya-yapıştır tekrarını önlemeye yardımcı olur.

Cevap 26/08/2010 saat 09:04
kaynak kullanıcı

oy
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
Cevap 26/08/2010 saat 09:04
kaynak kullanıcı

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