Comments (4)
I prefer option # 2, keeping private functions proximate to the ones that use them (as you can observe in Ecto and the standard library), rather than strictly separating the module into public and private.
In a well-written module, the public functions will be easy to pick out from their @doc
tags, while their private functions can be tucked below and kept accessible.
Any helper functions that are used by multiple functions can still be placed together at the end of the module rather than after whichever function first used them.
This module illustrates this nicely: https://github.com/elixir-lang/elixir/blob/030e0c7b53023ab2d75780dbdfe54c9cce225385/lib/elixir/lib/io/ansi/docs.ex
from elixir_style_guide.
@christopheradams Thanks for the reply, you make some good points. I think you're probably right in this case. Using @doc
certainly draws attention to the public functions in a module, but I'll note that there is sometimes a difference here between @doc
usage in internal vs external projects. On many of my Phoenix projects we don't use @doc
s for our context functions because they're only used internally and generally intuitively named. With libraries like Ecto and the elixir standard library, having @doc
s makes more sense since you have a wide audience of people using the libraries.
The module you linked to does give me some ideas though. Prefixing each public function with @spec
would also make any module skimmable.
Is the ordering of public/private functions something we want to include in the styleguide? If so, I'm happy to take a crack at it.
from elixir_style_guide.
from elixir_style_guide.
There's no precedent at all for prefixing private functions with an underscore.
I don't think the guide can take a position on private function placement, such as saying that they should always be at the bottom of the module, or below the function that uses them.
from elixir_style_guide.
Related Issues (20)
- camelCase vs PascalCase HOT 3
- Add preference for long args/`when` in methods? HOT 3
- Does the formatter make this obsolete? HOT 3
- Missing a section about maps HOT 5
- @module_attribute should be moved higher in Module attribute ordering HOT 1
- Establishing Guidelines for Maximizing Anonymous Function Readability in Reference to Escaped and Expanded Notations HOT 3
- Suggestion on Module Attribute Ordering HOT 1
- Deeply nested one-arity function calls? HOT 2
- new issue
- Placement of defguard? HOT 1
- using pipe with only 2 functions HOT 1
- Pipeline with single pipe operator for common cases like Enum.map/reduce/filter HOT 3
- Nested defmodule HOT 5
- Macro calls placement in a module HOT 1
- Naming: Modules HOT 1
- Clarification on multiline defs HOT 3
- cómo utilizamos?
- Racionalfor choice
- Broken Link HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from elixir_style_guide.