1. Non mi piace la sintassi
A == B1 or ... or A == Bn
non è ovvio. È per le forme semplici, ma quelle forme semplici sono rare. Ad esempio, non è necessario scrivere:
A == 1 or ... or A == 10
quando puoi semplicemente scrivere:
A >= 1 and A <= 10
Se si annulla la sequenza, la sintassi non aiuterà nemmeno:
Set = [ 4, 7, 2, 3, 0, 1, 1 ]
A == Set[0] or ... or A == Set[Set.Length]
è troppo prolisso.
Inoltre, che cosa sarebbe:
A == 1 or ... and A == 10
significa? Se questo è illegale, come un IDE potrebbe impedirlo? Perché imporre allo sviluppatore di digitare la stessa parola due volte?
Anche la leggibilità dovrebbe essere la tua preoccupazione. C < D1 +_and ... +_and Dm
nella tua domanda è già difficile da capire. Non riesco a immaginare un pezzo di codice che combini diversi intervalli.
2. in
e intervalli in SQL e Ada
La sintassi più semplice sarebbe quella già utilizzata in SQL per le parole chiave e in Ada e Matlab per gli intervalli:
A in 1..10
o
A in Set
Alcune varianti SQL utilizzano anche between
:
A between 1 and 10
Preferisco in gran parte la sintassi di Ada 1..10
, che è estremamente esplicito e più breve da scrivere. La parola chiave and
fa pensare al lettore un'operazione booleana, non un intervallo. Senza conoscere la sintassi, alcuni sviluppatori saranno anche tentati di scrivere:
A between 1, 10
o
A between(1, 10)
La sintassi SQL / Ada è piacevole quando si tratta di cercare un valore in un set o in un intervallo, ma non quando si tratta di verificare che un'espressione sia vera per qualsiasi valore di una sequenza. Non so se quei linguaggi abbiano costrutti che lo consentano.
3. C # world, come nota a margine
Si noti che in C #, che utilizza alcuni paradigmi della programmazione funzionale e ha espressioni lambda, la sintassi suggerita dovrebbe essere scritta in questo modo:
Ricerca di un valore in una sequenza:
var isInList = sequence.Contains(value);
o
var isInList = sequence.Any(a => a == value);
Verifica che l'espressione en sia valida per qualsiasi elemento di una sequenza:
var trueForAll = sequence.All(a => a > 0);
Filtering:
var positiveOnly = sequence.Where(a => a > 0);
Questa non è la migliore sintassi di sempre, e in gran parte preferisco quella ispirata da SQL / Ada, ma ti dà alcune idee su come il tuo problema è risolto in diverse lingue.
Puoi usare questa sintassi per crearne una tua, con parole chiave specifiche per la lingua. Qualcosa come:
A in Set # Verifies that Set contains A.
B in 1..10 # Verifies that 1 ≤ B ≤ 10.
C > 0 for any Set # Verifies that all elements of Set are positive.
D <> 0 for any 1..10 # Verifies that none of the values between 1 and 10 are equal to zero.