Notice _?Positive _?Positive is the fastest and most concise.
My intent above was only to compare ?Positive?Positive with x_/;Positive[x] x_ /; Positive[x]. Afterwards I realized a faster way to count the positive numbers in a long list is the follwing.
In:= data=RandomReal[{-0following.2,1},10^7];
Timing[Count[Positive[data],True];]
Out= {0.998,Null}
In:= data=RandomReal[{-0.2,1},10^7]; Timing[Count[Positive[data],True];] Out= {0.998,Null} Next we see the timing differences of ConditionCondition and PatternTestPatternTest are different for a more complicated example.
In:= data = RandomInteger[{-100,100},10^7];
Timing[Count[data,x_?(Function[n,And[Positive[n],EvenQ[n]]])];]
Out= {20.109,Null}
In:= data = RandomInteger[{-100,100},10^7];
Timing[ Count[data, x_/;And[Positive[x],EvenQ[x]] ];]
Out= {10.717,Null}
In:= data = RandomInteger[{-100,100},10^7];
test[n_] = And[Positive[n],EvenQ[n]];
Timing[ Count[data, x_?test[x]]; ]
Out= {0.546,Null}
In:= data = RandomInteger[{-100,100},10^7];
Timing[ Count[data, x_?(And[Positive[#],EvenQ[#]])&]; ]
Out= {0.515,Null}
In:= data = RandomInteger[{-100,100},10^7]; Timing[Count[data,x_?(Function[n,And[Positive[n],EvenQ[n]]])];] Out= {20.109,Null} In:= data = RandomInteger[{-100,100},10^7]; Timing[ Count[data, x_/;And[Positive[x],EvenQ[x]] ];] Out= {10.717,Null} In:= data = RandomInteger[{-100,100},10^7]; test[n_] = And[Positive[n],EvenQ[n]]; Timing[ Count[data, x_?test[x]]; ] Out= {0.546,Null} In:= data = RandomInteger[{-100,100},10^7]; Timing[ Count[data, x_?(And[Positive[#],EvenQ[#]])&]; ] Out= {0.515,Null} In the next example the definition is used because the integer has only factors larger than 10^15$10^{15}$. If not for the use of Condition we would have to evaluate FactorInteger twice and that can take a long time.