Un criterio assolutamente fondamentale per la scelta tra le due strutture di controllo è la cardinalità dell'insieme di valori numerici da controllare. Una switch su una trentina di casi è già oltre i limiti dell'accettabilità nella schiacciante maggioranza dei contesti applicativi ed indica quasi sempre marchiani errori progettuali: in quasi tutti i casi degeneri si possono e si devono usare tabelle LUT o jump tables esplicite, mappando il set di valori di controllo sull'intervallo iniziale dei naturali [0, n], anche tramite hash.
In buona sostanza, nel classico gestionalone C con milleduecento voci di menu esiste sicuramente una banalissima funzione blackbox che prende in input un tasto dalla tastiera e, tenendo conto della posizione attuale nel menu tree, sputa fuori direttamente un puntatore alla funzione da richiamare. Sarebbe semplicemente demenziale procedere diversamente, con una switch esplicita per ogni caso, anche se nel mainstream non mancavano geni capaci di fare questo e altro.
Per contro, la if() è lo statement di controllo per eccellenza previsto implicitamente dal teorema di Bohm-Jacopini (qualsiasi algoritmo praticamente computabile può essere implementato in un linguaggio che consenta sequenze, scelte e cicli) e la sua applicabilità è praticamente universale.