Help us understand the problem. What is going on with this article?

Excelから関数型言語マスター1回目:データ行の”並べ替え”と”絞り込み”

(この記事は、「Elixir or Phoenix Advent Calendar 2017」の3日目です)


fukuoka.ex代表のpiacereです
ご覧いただいて、ありがとうございます:bow:

私は普段、福岡のスタートアップ企業のCTOとして、「ビッグデータ分析+AI・ML開発」を行うElixir/Phoenix/Vue.js/Kerasリードプログラマをしながら、福岡Elixirコミュニティ「fukuoka.ex」のMeetUp(偶数月定期開催)やプログラミング入門ハンズオン、もくもく会を主催しています

image.png

先日、「fukuoka.ex #8 ~2018年 春のElixir入学式~」というMeetUpを開催し、その中で、Elixir入門者向けのセッションの登壇しましたので、その一部をコラム化してみようと思います

Excelを使う位カンタンな関数型プログラミング言語「Elixir」

「関数型言語」の習得が、なかなか進まない、といったことをよく聞きます

特に、「オブジェクト指向言語」に慣れ親しんだ方ほど、苦しんでいるようです

Elixirは、「Excel使う位、簡単」なので、「関数型言語」の習得が進まない方には、オススメの言語です

また、プログラミングが初めての方でも、Excelでできることが、Elixirも同じようにできると分かれば、習得しやすいでしょう

この「Excelから関数型言語マスター」シリーズでは、Excelと同じ機能を、Elixirでも実現できる、というところからスタートし、その延長で、Elixir/Phoenixによる「Web+DB開発」や「Web+外部API開発」、「Web上でのグラフ描画」まで作れる、ということを実感していただこうと思います

事前準備:Elixirのインストール

Elixirを使い始めるのに、3種類の方法があります

  1. インストーラを使う                ※Windowsはこれがオススメ
  2. asdf経由でインストールする            ※macOS/Linux含むUNIX系はこれがオススメ
  3. DockerでElixirイメージをインスト―ル (pull) する   ※Dockerに使い慣れている方向け

インストール方法1. インストーラを使う

下記URLの手順に沿って、Elixirをインストールします
https://elixir-lang.org/install.html

Windowsはインストーラをダウンロードしてインストールします

macOSはHomebrewでインストールします

Linux含むUNIX系は、Ubuntuのところに記載されているaptを使う方法であれば、最新バージョンがインストールされますが、Ubuntu以外の記載されている方法だと、古いバージョンのElixirがインストールされるため、インストール方法2か3をオススメします

image.png

なおUbuntu系では、Elixir最新がリリースされてから、少しの間、1つ手前のバージョンのElixirがインストールされることがあるため、最新化したい場合は、上記手順後、下記のElixirソースコードからのビルドを追加で行ってください

apt install gcc make
wget https://github.com/elixir-lang/elixir/archive/v1.11.0.tar.gz
tar vzfx v1.11.0.tar.gz
cd elixir-1.11.0
export PATH="${PATH}:/usr/local/bin"
echo 3 > /proc/sys/vm/drop_caches
make && make install

インストール方法2. asdf経由でインストールする

下記URLの手順に沿って、asdf経由でElixirをインストールします
https://qiita.com/nishiuchikazuma/items/b9d319732ddb540fd990

インストール方法3. DockerでElixirイメージをpull

下記URLを、「Docker Community Edition (CE)」までスクロールし、利用OS毎のDockerをインストールします
https://www.docker.com/get-docker

image.png

その後、以下コマンドでElixirイメージを入れます

docker pull elixir

以下コマンドで、Elixirイメージのコンテナを起動します

docker run -p 4000:4000 -i -t elixir /bin/bash

Excelの「並べ替え」をElixirで書いてみる

さて、Elixirのインストールが完了したので、Excelの「並べ替え」をElixirで書いてみましょう

シェルやコマンドプロントを起動し、その中で、Elixirのコードをインタラクティブに実行できる「iex」コマンドを起動します

iex

Interactive Elixir (1.6.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>

データの「並べ替え」は、Elixirでは、Enum.sort()を使います

iex内で、実際にコードを打って、試してみてください

image.png

パイプ「|>」により「データ→並べ替え」という流れの順で書くこともできます

image.png

Excelの「フィルタ」をElixirで書いてみる

次は、Excelの「フィルタ」をElixirで書いてみます

データの「フィルタ」は、Elixirでは、Enum.filter()を使います

image.png

Enum.filter()内のfn( n )は、データの1つ1つの値を変数n※として、後ろの処理 (青枠) に渡す、という意味で、青枠の処理では、1つ1つの値が「999」で無いことをチェックしています

※この「n」は、fn()で指定した変数と、後ろの処理で同一であれば、どんな変数名でも構いません

image.png

なお「fn」は、関数 (function) を意味しており、その後の「->」から「end」までの間が、関数の処理を意味しています

image.png

つまり、データの1つ1つの値が、「999で無いことをチェック」するという関数に順に渡され、 「999で無い値」だけが残るようフィルタされている、というのが、Enum.filter()で行われている処理です

なお、「999」以外の数字や、以下のような「!=」以外も使えるので、いろいろ試してみてください

「==」、「>=」、「>」、「<=」、「<」

あと、「n <= 323 && n >= 999」や「n == 323 || n == 54」みたいな書き方もできます

終わり

Excelの「並べ替え」「フィルタ」と同じことをElixirで書いてみましたが、思ったよりカンタンだったのでは無いでしょうか?

「関数型言語」と聞くだけで、複雑そうだったり、これまで聞いたことが無い用語が飛び交う世界…というのが、一般的なイメージだったかと思いますが、そうでは無く、Excelとやっていることは同じなんだ、ということをElixirから感じていただけたら幸いです

次回は、「列の抽出とWeb表示」を行います

あと、Advent Calendarの方、明日は、@tuchiro さんの「ElixirでSI開発入門 #1 Ectoで悲観的ロック」です


:stars::stars::stars::stars::stars: お知らせ :stars::stars::stars::stars::stars:
先日、fukuoka.exアドバイザーズ(コア運営メンバーのこと)のインタビュー記事を公開しました

昔やっていた、超大規模案件で苦しんでいたところから、Elixirを始めたきっかけが取材されています

image.png

p.s.「いいね」よろしくお願いします

ページ左上の image.pngimage.png のクリックを、どうぞよろしくお願いします:bow:
ここの数字が増えると、書き手としては「ウケている」という感覚が得られ、連載を更に進化させていくモチベーションになりますので、もっとElixirネタを見たいというあなた、私達と一緒に盛り上げてください!:tada:

piacerex
福岡でプログラマしながらIT商社とIT企業を経営してます。Elixir/Kerasをよく使う。Elixirコミュ#fukuokaex、福岡理学部#FukuokaScienceを主催。プログラマ歴36年/XPer歴19年/デジタルマーケッター/経営者/CTO/技術顧問数社。 シボと重力子放射線射出装置は別腹(^^)
https://github.com/piacerex
fukuokaex
エンジニア/企業向けにElixirプロダクト開発・SI案件開発を支援する福岡のコミュニティ
https://fukuokaex.fun/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away