poorking, тут уж, как говорится, на вкус и цвет. Хотите - передавайте массив, хотите - хеш. У меня, как не трудно заметить, хеш все равно на этапе препроцессинга перегоняется в массив.
Единственный случай, где я вижу разумным использование хеша вместо массива - указание значений по-умолчанию для произвольных переменных, а не только первых n штук. Но в таком случае есть 2 минуса: нам нужно ввести какое-то значение, которое будет сообщать, что данный аргумент не задан и, что гораздо существеннее, при вызове такой функции придется писать что-то вроде
fncName(a, b, undefined, undefined, 'red');
Это, все-таки, не очень хорошо и в статье, ссылку на которую я привел в предыдущем сообщении, предлагается в таких случаях использовать один аргумент для функции - объект с нужными полями.
fncName({
speed: a,
count: b,
codeName: 'red'
});