diff --git a/docs/decoupled.md b/docs/decoupled.md index 419beb0..162681f 100644 --- a/docs/decoupled.md +++ b/docs/decoupled.md @@ -176,12 +176,28 @@ def reversi(arr): def reversi(arr): """Reverses a list.""" reved = [] - for i in range(len(arr)): - reved.append(arr[len(arr) - 1 - i]) + for i in reversed(range(len(arr))): + reved.append(arr[i]) return reved ``` ```` +````{tabbed} Even better code using list indexing +``` +def reversi(arr): + """Reverses a list.""" + return arr[::-1] +``` +```` + +````{tabbed} Even better code version using built-in functions +``` +def reversi(arr): + """Reverses a list.""" + return list(reversed(arr)) +``` +```` + Functions with side effects can be hard to reason about: you often need to understand their internals and state in order to use them properly. They're also harder to test. **Not every function with side effects is problematic, however**. My pragmatic advice is to first learn to spot and understand pure functions. Then organize your code so that many functions are pure, and those that are not are well-behaved. ```{figure} figures/pure-impure.svg