2010-06-07 29 views
8

setinde olup olmadığını Aşağıdaki koda sahibim. Çirkin görünüyor, eğer değer aşağıdaki değere eşitse, o zaman bir şeyler yapın.kontrol etmek için alternatif, bir değerin

var 
    Value: Word; 
begin 
    Value := 30000; 
    if (Value = 30000) or (Value = 40000) or (Value = 1) then 
    do_something; 
end; 

ben şöyle kodu refactor istiyorum:

var 
    Value: Word; 
begin 
    Value := 30000; 
    if (Value in [1, 30000, 40000]) then // Does not work 
    do_something; 
end; 

Ancak refactored kodu çalışmaz. Delphi'de geçerli bir kümenin yalnızca tip baytlı öğeleri kabul ettiğini varsayalım. Orijinal kodumu yeniden düzenlemek için iyi bir alternatif varsa (vakayı kullanmanın yanında)?

cevap

15

Böyle bir şey düşünüyorum?

case value of 
    1, 30000, 40000: do_somthing 
end; 
+1

Teşekkürler, ama sorumu belirttiğim gibi başka bir alternatif istiyorum. Anahtarı kullanmanız nedeniyle ... böyle bir mantık için durum normal değil – stanleyxu2005

+0

@ stanleyxu2005. Muhtemelen en verimli. Ve, bunun yanı sıra, böyle bir şey yazmaya başladığınızda, eğer [.] 'De bir değer [..]' da bir değer varsa, başka bir şey eklemeniz gerekebilir. blabla yapmak blablabla yapmak. Böyle bir durumda, durum bariz bir seçimdir. –

+0

Bir gün bekledikten sonra cevap bekliyorum, kabul ediyorum ki ... durum en kabul edilebilir çözüm. – stanleyxu2005

13

Nasıl bir açık dizi kullanmaya ne dersiniz?

function ValueIn(Value: Integer; const Values: array of Integer): Boolean; 
var 
    I: Integer; 
begin 
    Result := False; 
    for I := Low(Values) to High(Values) do 
    if Value = Values[I] then 
    begin 
     Result := True; 
     Break; 
    end; 
end; 

Örnek (sözde kodu): Daha büyük bit kümeleri için sınıfı vardır

var 
    Value: Integer; 
begin 
    Value := ...; 
    if ValueIn(Value, [30000, 40000, 1]) then 
    ... 
end; 
+1

+1, Güzel olan, yeniden kullanılabilirliği ve temizliği severim. –

1

, Classes.TBits bkz.

Sabit ifadeleri kolayca yapmazken, diğer bazı durumlarda yararlı olabilir.

İlgili konular