To chime in, I’ve been caught out using value > 0 without checking I was 
dealing with an integer first as well.

Andrew

On 20 Nov 2017, 19:15 +0200, Isaac Whitfield <[email protected]>, wrote:
> Pure coincidence but whilst browsing the Timex library, they also had to roll 
> their own - so it can't be just me! 
> https://github.com/bitwalker/timex/blob/c86a96af43cb0052249a4899d988aaa4f665982b/lib/timex/macros.ex
>
> On Sunday, November 19, 2017 at 4:22:01 PM UTC-8, Isaac Whitfield wrote:
> > Hi Andrea!
> >
> > Thank you for your quick feedback! What you said about adding six functions 
> > is true, but they're very straightforward macros so it shouldn't be too 
> > painful. I'm not entirely sure I agree about the operators being more 
> > clear; people new to Elixir could simply put > 0 in a guard and just assume 
> > there's a type check there (even for those not new, it's easy to forget). 
> > Seeing is_positive/1 and is_negative/1 in code examples would reinforce the 
> > fact that a basic > is not sufficient.
> >
> > I think this use case is common enough that it warrants being in stdlib. 
> > Integer has is_odd/1 and is_even/1 and I would imagine that is_positive/1 
> > and is_negative/1 would be used at least as much (although maybe I'm 
> > totally wrong :D). An even more fitting example is the macro for is_nil/1 
> > when that's a single conditional in a guard and really doesn't save much.
> >
> > Thanks for your feedback!
> >
> > IW
> >
> > On Sunday, November 19, 2017 at 4:09:40 PM UTC-8, Andrea Leopardi wrote:
> > > I lean on a soft no because we’d have to introduce six new functions as 
> > > you said, plus is_non_negative likely as well. To me, the comparison 
> > > operator is more clear and if you use it many many times, than nothing 
> > > wrong with writing down your own macros as you mentioned :).
> > >
> > > > On Sun, 19 Nov 2017 at 19:07, Isaac Whitfield <[email protected]> wrote:
> > > > > Hey all!
> > > > >
> > > > > Sorry if this has been broached previously, but searching didn't show 
> > > > > anything (either on the list or on Google).
> > > > >
> > > > > I recently realised that I write a lot of `> 0` guard clauses, 
> > > > > combined with the fact that they're either passing `is_integer/1` or 
> > > > > `is_float/1`. I know that it's an easy thing to write yourself but:
> > > > >
> > > > > def my_function(value) when is_integer(value) and value > 0 do
> > > > >   # stuff
> > > > > end
> > > > >
> > > > > def my_function(value) when is_positive(value) do
> > > > >   # stuff
> > > > > end
> > > > >
> > > > > and based on the frequency I've used it, seems like a reasonable 
> > > > > request for stdlib inclusion.
> > > > >
> > > > > So, I would like to propose the following (and feel free to shoot me 
> > > > > down!). Of course each call would just be a macro:
> > > > >
> > > > > Integer.is_positive/1 - is_integer(val) and val > 0
> > > > > Integer.is_negative/1 - is_integer(val) and val < 0
> > > > > Float.is_positive/1   - is_float(val) and val > 0
> > > > > Float.is_negative/1   - is_float(val) and val < 0
> > > > > Kernel.is_positive/1  - is_number(val) and val > 0
> > > > > Kernel.is_negative/1  - is_number(val) and val < 0
> > > > >
> > > > > And coincidentally, I'm assuming that it's better to perform the type 
> > > > > check first, I guess I'd appreciate if someone could confirm that? 
> > > > > Also goes without saying that I'd be happy to impl this if we decide 
> > > > > to adopt.
> > > > >
> > > > > Thanks for your consideration!
> > > > >
> > > > > IW
> > > > > --
> > > > > You received this message because you are subscribed to the Google 
> > > > > Groups "elixir-lang-core" group.
> > > > > To unsubscribe from this group and stop receiving emails from it, 
> > > > > send an email to [email protected].
> > > > > To view this discussion on the web visit 
> > > > > https://groups.google.com/d/msgid/elixir-lang-core/1d9f2250-9783-4af8-b2bb-9c0379f3b122%40googlegroups.com.
> > > > > For more options, visit https://groups.google.com/d/optout.
> > > --
> > >
> > > Andrea Leopardi
> > > [email protected]
> --
> You received this message because you are subscribed to the Google Groups 
> "elixir-lang-core" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/elixir-lang-core/5cad86c6-4e89-485b-9db9-6a4140c13a63%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/227e8d9e-5dc7-4002-819b-45176247c5c6%40Spark.
For more options, visit https://groups.google.com/d/optout.

Reply via email to