It is my practice to place Condition expressions on the left side of := and :> in almost every case.
I find this to be more logical as it is part of the pattern
With the exception of use inside
Module,Block, orWithon the RHS, which is a special case, the Condition depends only on the LHS, and therefore IMHO is more logically placed on the LHSIts behavior remains consistent when used with
=and->f[x_] /; x < 5 := 1andg[x_] /; x < 5 = 1behave similarlyf[x_] := 1 /; x < 5andg[x_] = 1 /; x < 5behave differently
The evaluation path is significantly less complicated
Placing the condition on the RHS requires the internal use of
RuleConditionand$ConditionHoldwhich can significantly slow down simple functions.Clear[f, g] f[x_] /; OddQ[x] := 1 f[x_] := 0; g[x_] := 1 /; OddQ[x] g[x_] := 0; f[4] //Trace{f[4], {OddQ[4], False}, 0}g[4] //Trace{g[4],{{OddQ[4],False},RuleCondition[$ConditionHold[$ConditionHold[1]],False],Fail},0}a = Range@1*^6; Timing[f /@ a;] Timing[g /@ a;]{0.421, Null} {0.655, Null}
Nevertheless, the documentation for Condition shows the RHS form and many experienced users also seem to favor this form.

Which form should be standard, and why?
A brief edit: The form f[x_ /; x < 5] := 1 is what I use most often as should be clear to those who read my answers on StackOverflow. I omitted this form specifically because I didn't want to spawn a discussion (bad for SE sites) about purely-stylistic differences. I see now that this may have had the opposite effect. Rather I wish to focus this question on the apparently canonical yet IMHO inferior RHS placement and what its merits are.


