bmitch
New to Elixir - Mind reviewing my code?
I’m new to Elixir and just recently completed “Elixir for Programmers” by pragdave.
I thought creating tic tac toe in Elixir would be a good next step for me to continue my learning.
I’ve created the logic for the tic tac toe game and was wondering if anyone would mind reviewing it and providing me with feedback?
The meat of the code starts from here:
A couple of things I’d like to see if can be improved:
-
Can you update multiple values in a map better than the way I do it here: elixir_tictactoe/lib/tictactoe/game.ex at master · bmitch/elixir_tictactoe · GitHub
-
Is there a more condensed way to write this guard on the function?
elixir_tictactoe/lib/tictactoe/board_checker.ex at master · bmitch/elixir_tictactoe · GitHub
Thanks very much!
Most Liked
OvermindDL1
First thing first, always run your code through the elixir formatter. ![]()
The way you are doing it is fine:
game = Map.put(game, :board, new_board)
|> Map.put(:whos_turn, rotate_player(who))
Map.put(game, :game_state, update_game_state(game))
Though more efficiently would probably be (assuming you can write update_game_state to work on the old state):
defp accept_move(game = %Game{}, who, index, true) do
%{game |
board: put_elem(game.board, index, who),
whos_turn: rotate_player(who),
game_state: update_game_state(game),
}
end
Use not in:
def check_board({a, b, c, d, e, f, g, h, i}) when nil not in [a, b, c, d, e, f, g, h, u] do
:draw
end
def check_board(no_nils), do: :in_progress
Otherwise there are a few places in code that could be simplified more but I’m a bit busy at moment… ^.^;
kokolegorille
A really small note about aliasing… You can use MODULE when aliasing the module.
eg.
defmodule Tictactoe.Game do
alias __MODULE__
end
bmitch
Thanks very much @OvermindDL1 @yurko and @kokolegorille !! Great feedback.
Popular in Questions
Other popular topics
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
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance








