Je suis en charge de réécrire un ancien code VB. Je comprends comment cela fonctionne, mais j'ai l'impression qu'il existe un moyen beaucoup plus efficace de faire ce qu'ils ont fait. Je ne peux pas comprendre ce que c'est. Voici un exemple artificiel qui, en termes d'exigences de données, est vraiment similaire à ce que je dois faire.
L'utilisateur doit choisir le fabricant, la marque, le modèle et la couleur de sa voiture dans une interface graphique. J'ai un gros fichier texte qui ressemble à ceci:
Ford Truck F150 red
Ford Truck F150 blue
Ford Truck F150 black
Ford Truck F150 silver
Ford Truck F250 red
Ford Truck F250 green
Ford Sedan Taurus red
Ford Sedan Taurus green
Ford Sedan Taurus white
Ford...
...
Subaru SUV Forester blue
Subaru SUV Forester red
Subaru SUV Outback Black
Subaru SUV Outback Green
Subaru SUV Outback Blue
Subaru SUV Outback Red
Subaru...
...
etc.
Donc, si la première sélection est Subaru, la deuxième case (marque) ne devrait pas avoir d'option pour sélectionner Truck car aucun des Subarus n'est un camion. De même, s'ils sélectionnent Ford, Sedan et Taurus, la dernière case (couleur) ne devrait pas afficher une option pour sélectionner le bleu. Ou noir. Ou autre chose que du rouge, du vert ou du blanc.
Les personnes qui ont écrit le code avant moi ont trouvé ceci (en python-y psuedocode):
def getValidOptions():
items = []
for i from 0 to numRows:
options = getLine().split()
if selectingManufacturer:
if options[0] not in items:
items.append(options[0])
else if selectingMake:
if selectedManufacturer == options[0] and options[1] not in items:
items.append(options[1])
else if selectingModel:
if selectedManufacturer == options[0] and selectedMake == options[1] and options[2] not in items:
items.append(options[2])
else if selectingColor:
if selectedManufacturer == options[0] and selectedMake == options[1] and selectedModel == options[2] and options[3] not in items:
items.append(options[3])
return items
Je pense que c'est tout simplement hideux, à la fois au niveau de l'algorithme et au niveau de la syntaxe. D'une part, il analyse l'ensemble du fichier, alors qu'il n'a besoin de lire que quelques lignes s'il est bien fait. Pour rendre cela encore plus inefficace, mes données réelles ont 6 options à sélectionner, plutôt que seulement 4. Cela stocke également plus de données que nécessaire, compte tenu de la quantité de duplication des données.
Je cherche soit une manière différente de stocker les données dans le fichier, soit une façon différente de les analyser pour rendre la getValidOptions
fonction à la fois plus jolie et plus efficace. Existe-t-il des moyens de le faire?