The third argument for SynthDef is rates. Quote from the help file:
An optional Array of specifications for the ugenGraphFunc’s arguments. The order corresponds to the order of arguments. See the examples below to see how these are used.
\ir ! 5 is shorthand for \ir.dup(5) and returns [ \ir, \ir, \ir, \ir, \ir ]. It makes sure that the first 5 SynthDef arguments (here: all arguments) are initial rate, i.e. they are only evaluated once when the Synth is created, otherwise they would be control rate. This just makes the computation of certain UGens slightly more efficient. Typically you wouldn’t have to bother with these kinds of micro optimizations.