From dd04d4164c38cdbcdf4ce72d2b721093f40b0e0d Mon Sep 17 00:00:00 2001 From: Brujo Benavides Date: Mon, 15 Sep 2014 17:33:59 -0300 Subject: [PATCH] [Fixes #7] No Macros --- README.md | 11 +++++++++++ src/macro_names.erl | 12 ++++++------ src/macros.erl | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 src/macros.erl diff --git a/README.md b/README.md index 397639f..c72273b 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ Table of Contents: * [Strings](#strings) * [IOLists over string concatenation](#iolists-over-string-concatenation) * [Macros](#macros) + * [No Macros](#no-macros) * [Uppercase Macros](#uppercase-macros) * [No module or function name macros](#no-module-or-function-name-macros) * [Misc](#misc) @@ -235,6 +236,16 @@ Erlang syntax is horrible amirite? So you might as well make the best of it, rig ### Macros +*** +##### No Macros +> Don't use macros, except for very specific cases, that include +> * Predefined ones: ``?MODULE``, ``?MODULE_STRING`` and ``?LINE`` +> * Magic numbers: ``?DEFAULT_TIMEOUT`` + +*Examples*: [macros](src/macros.erl) + +*Reasoning*: Macros make code harder to debug. If you're trying to use them to avoid repeating the same block of code over and over, you can use functions for that. + *** ##### Uppercase macros > Macros should be named in ALL_UPPER_CASE: diff --git a/src/macro_names.erl b/src/macro_names.erl index c51a877..b53546c 100644 --- a/src/macro_names.erl +++ b/src/macro_names.erl @@ -1,9 +1,9 @@ -module(macro_names). --define(bad, bad). --define(BADMACRONAME, bad). --define(Bad_Macro_Name, bad). --define(Bad_L33t_M@Cr0, bad). +-define(bad, 1). +-define(BADMACRONAME, 2). +-define(Bad_Macro_Name, 3). +-define(Bad_L33t_M@Cr0, 4). --define(GOOD, good). --define(GOOD_MACRO_NAME, good). +-define(GOOD, 5). +-define(GOOD_MACRO_NAME, 6). diff --git a/src/macros.erl b/src/macros.erl new file mode 100644 index 0000000..048c41e --- /dev/null +++ b/src/macros.erl @@ -0,0 +1,32 @@ +-module(macros). + +-define(OTHER_MODULE, other_module). +-define(LOG_ERROR(Error), + error_logger:error_msg( + "~p:~p >> Error: ~p~n\tStack: ~p", + [?MODULE, ?LINE, Error, erlang:get_stacktrace()])). + +-define(HTTP_CREATED, 201). + +-export([bad/0, good/0]). + +bad() -> + try + ?OTHER_MODULE:some_function(that, may, fail, 201) + catch + _:Error -> + ?LOG_ERROR(Error) + end. + +good() -> + try + other_module:some_function(that, may, fail, ?HTTP_CREATED) + catch + _:Error -> + log_error(?LINE, Error) + end. + +log_error(Line, Error) -> + error_logger:error_msg( + "~p:~p >> Error: ~p~n\tStack: ~p", + [?MODULE, Line, Error, erlang:get_stacktrace()]).