Skip to content

Instantly share code, notes, and snippets.

View Adzz's full-sized avatar

Adam Lancaster Adzz

View GitHub Profile
defmodule Square do
defstruct [:side]
end
defmodule Circle do
defstruct [:radius]
end
defprotocol Area do
defprotocol Perimeter do
def calculate(shape)
end
defimpl Perimeter, for: Square do
def calculate(square) do
square.side * 4
end
end
# Make some shapes
defmodule Square do
defstruct [:side]
end
defmodule Circle do
defstruct [:radius]
end
Shape.area(%Square{side: 10}) #=> 100
defmodule Perimeter do
def calculate(shape) do
case shape do
%Square{side: side} -> side * 4
%Circle{radius: radius} -> radius * 2 * 3.14
end
end
end
Perimeter.calculate(%Square{side: 10}) #=> 40
defmodule Square do
defstruct [:side]
end
defmodule Circle do
defstruct [:radius]
end
defmodule Area do
def calculate(shape) do
class Circle
def initialize(radius)
@radius = radius
end
def area()
3.14 * @radius * @radius
end
end
class Square
def initialize(side)
@side = side
end
def area()
@side * @side
end
end
defmodule Square do
defstruct [:side]
end
defmodule Circle do
defstruct [:radius]
end
defmodule EquilateralTriangle do
defstruct [:side]
defmodule Project do
def total_cost(shape, cost_per_square_meter) do
Shape.area(shape) * cost_per_square_meter
end
end