aethereus
An irrelevant question, there are function names like Integer.is_odd, and there are function names like Enum.empty?, why the two different naming styles?
Trending in Questions
Hello!
Suppose you are building workflow (order / task / payment) processing system with the following requirements:
Each workflow con...
New
I’m in search of an Elixir library that offers PDF generation capabilities similar to Ruby’s Prawn. While there have been discussions abo...
New
I’m looking to build a personal workflow to quickly deploy web applications written in elixir/phoenix, for local consumption (ie not on t...
New
Before I dive in myself, did anyone successfully sprinkle Hologram into their existing LiveView app?
Looking for hints regarding:
Addi...
New
Kia ora,
We have been using elixir-google-api to connect to Google Drive. However, with the updates to Tesla due to CVEs this is now bro...
New
Hi all, I wanted to ask how the community is dealing with post-release steps.
Today we have Ecto migrations, which make sure that the db...
New
Hello,
I have an Elixir backend that implements a custom protocol over TCP. I want to load test the backend and assess the performance o...
New
Other Trending Topics
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve.
They are GUI (Emerge) and State management (S...
New
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
Emily is an Elixir library that runs Nx computations on Apple’s MLX. Install it as the default Nx backend and Nx, defn, Axon, Nx.Serving,...
New
There are three potential reasons for members of this forum to have a look at https://vutuv.de
You are tired or annoyed of LinkedIn.
Yo...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #blog-post
- #phoenix_html
- #iex
- #graphql
- #ai
- #genstage
- #elixirconf-us
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex










Marked As Solved
christhekeele
Because not having a way to recognize the special-case guard-enabled functions would be more confusing to new-comers.
Guards are used much, much more often than they are created—they are possibly typed out more than any other function or macro,
ifanddefincluded. This is especially true of theis_type-check guards since they are the only way to switch on type information, in or outside function heads. So you will rapidly become fluent with this special casing.We want new-comers to learn fast and well the fact that you can’t throw just any predicate function into a guard. Accepting the cognitive burden of remembering which functions are allowed in guards is far more important than the burden of remembering to use a different naming style when writing them, and if they were named identically it would be much harder to memorize which is which for the first time.
Additionally, this naming difference helps visibility and discoverability: we want these special cases to stand out in documentation, we want people like you to notice the discrepancy and take note of it like you have here, instead of frustratedly filing bug reports about how only some predicates seem to work in guards.
So I think it has proved an effective decision.
Also Liked
michalmuskala
As a side note, this convention is explained in the Naming Conventions doc page.
mjadczak
Traditionally, Erlang uses
is_xxxfor functions which return a boolean value. In particular, functions which can be used in guards, of which many are indeedis_xxxfunctions, were taken wholesale into Elixir from Erlang. Currently, in Elixir, theis_xxxformat serves as an indicator that a function / method can be used inside a guard. SinceInteger.is_odd/1is a macro which can be placed into a guard, it also follows this convention. Most other Elixir functions which return a boolean value, such asEnum.empty?/1cannot be placed in guards, and follow the normal Elixirxxx?naming convention.aethereus
But non-boolean guard-friendly functions such as
divandremdo not have such indicator, why should boolean functions be a special case? For fresh Elixir programmers, remembering different naming styles can be a burden, so why not usexxx?style exclusively?