## Wednesday, November 25, 2015

### Refactoring the evil i, j, k

For the sake of argument, consider you have the following input data:

let userIds = [1,2,3,4,5]

1 : "John",
2 : "Mary",
4 : "James"
]

let userAges = [
2 : 30,
4 : 40,
5 : 25

]

The task is to find all the users with name and age.

Consider the following solution:

for i in userIds {
for (k,l) in userAges {
if (i == j) && (j == k) {
print("user with id \(i) has name \(name) and age \(k)")
}
}
}

}

Correct solution?

Let's see the result:

user with id 2 has name Mary and age 2
user with id 4 has name James and age 4

So the solution is incorrect not because the algorithm is failing, just because we got lost into i,  j,  k that have meaningless names.

Consider the following solution:

for userId in userIds {
for (ageUserId,age) in userAges {
if (userId == namesUserId) && (namesUserId == ageUserId) {
print("user with id \(userId) has name \(name) and age \(ageUserId)")
}
}
}

}

The error is now obvious and the solution as well:

for userId in userIds {