エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

Elixir

Mock パッケージを使った Elixir のテスト

Mock を使ったテストを覚えたので、そのメモです。 全容は GitHub に置いてあります。 https://github.com/mattsan/test_with_mocks_ex リポジトリ名は test_with_mocks_ex ですが、中の Elixir のプロジェクト名 は fizz_buzz になってます。気をつけて。 …

Elixir で Gettext を使う

由緒正し I18n の仕組みということを、 Phoenix を触るようになって初めて知りました。 gettext - Wikipedia Phoenix ではプロジェクトを作成すると自動的にパッケージが追加されますが、通常の Elixir プロジェクトで利用する手順を調べました。 くわしくは…

整数値でも浮動小数点数値でもパースしたい

Elixir で文字列から数値に変換するときに String.to_integer/1 や String.to_float/1 を使いますが、前者は浮動小数点数値の文字列を与えると、後者は整数値の文字列を与えると例外を投げてしまいます。 iex(1)> String.to_integer("123") 123 iex(2)> Stri…

式を式のまま受け取り左辺と右辺を別々に評価する

Elixir のテストの assert は引数が一つで、一つの式を与えるのですが、左辺と右辺のそれぞれの値を把握しています。 例えば。 適当なプロジェクトを作り、 $ mix new foo $ cd foo テストをこんな風に書いて、 # test/foo_test.exs defmodule FooTest do us…

Duck Typing 〜 Elixirの多態

# 鶩 defmodule Duck do defstruct name: nil end # 犬 defmodule Dog do defstruct name: nil end # 猫 defmodule Cat do defstruct name: nil end # 鳴くプロトタイプ defprotocol Sound do def sound(_) end # 鶩が鳴く実装 defimpl Sound, for: Duck do …

Elixir の OptionParser.parse はハイフンをアンダスコアに置き換える

OptionParser.parse(["--show-all"], [switches: [show_all: :boolean]]) # => {[show_all: true], [], []} OptionParser.parse(["--show_all"], [switches: [show_all: :boolean]]) # => {[], [], [{"--show_all", nil}]} Elixir converts switches to unde…

「どう書く」をElixirで書いたときのテストを簡単にする

Elixir でコールバックってどうやって実装しているのだろうと調べてみたら、マクロで実現されていました。なるほど。 その昔 C 言語でマクロを使ってコードを生成していたのを思い出した。 そんなわけで。マクロを使って「どう書く」のテストを実行するモジ…

第3回ESMどう書くを開催しました

前回開催からおよそ1年半。第3回社内向けどう書くを開催しました。 プログラミングElixir 現在、社内で「プログラミングElixir」の読書会を開催しています。プログラミングElixir作者: Dave Thomas,笹田耕一,鳥井雪出版社/メーカー: オーム社発売日: 2016/08…

ビットをもっと自由自在に扱える言語

Elixir を学んでいます。 ビットをもっと自由自在に扱えるようにしてみた 7 年ほど前にビット操作を支援するコードを C++ で書いたことがあります。 ビットをもっと自由自在に扱えるようにしてみた。 - エンジニアのソフトウェア的愛情 ビットをもっと自由自…

Redis Pub/Sub in Elixir 覚書

Exredis を使っています。 GitHub - artemeff/exredis: Redis client for Elixir defmodule Subscribe do def sub(channel) do {:ok ,client_sub} = Exredis.Sub.start_link pid = Kernel.self Exredis.Sub.subscribe(client_sub, channel, fn msg -> send(p…

RPN in Elixir

# Rpn.eval "3 1 - 2.1 +" # => 4.1 defmodule Rpn do def eval(expression) do eval(tokenize(expression), []) end defp eval([], [result]), do: result defp eval(["+"|tokens], [rhs, lhs|stack]), do: eval(tokens, [lhs + rhs | stack]) defp eval(["…

FizzBuzzを宣言的に書く、宣言できない場合は宣言っぽく書く

プログラミング Elixir を読んでいます。プログラミングElixir作者: Dave Thomas,笹田耕一,鳥井雪出版社/メーカー: オーム社発売日: 2016/08/19メディア: 単行本(ソフトカバー)この商品を含むブログ (3件) を見る Elixir プログラミング Elixir の第5章で …