Zare,
Either are ok in this case, however, Sometimes you evaluate an expression that contains a variable, ie "x". and then want to create a function of x from the evaluated expression, you would use = if you want to evaluate the expression immediately.
You need to be a bit clever to do the dynamic number of parameters to Manipulate. Here is an example that creates at list of the variables in an expression (data) and then constructs the Manipulate that you want.
Lets create a function to get all the variables in an expression:
findAllVars[eqns_] :=
DeleteCases[
Union[Flatten[
Replace[eqns , head_[args___] -> List[args], {0, Infinity}]]],
x_ /; NumericQ[x]]
Now we can use it in your example. I assume that "data" contains your expression -- you can also make this a function of data instead of having data being global.
With[{arr = Arrow[data],
varSliders = Sequence @@ Map[{#, 0, 100} &, findAllVars[data]]},
Manipulate[
Graphics3D[{arr, region}, Axes -> True, ViewPoint -> Front],
varSliders]]
You need a "With" to place the arrow expression into the Manipulate because Manipulate has attribute HoldAll. You need to construct a sequence to specify the slider variables to the Manipulate. Again, you need to insert the sequence using With. The Map constructs the arguments in the proper format for Manipulate.
I hope this helps.
Regards,
Neil