React.js+redux構成でaction内でstateを参照する方法

Gakuです(*´Д`)

また、最近ちょこちょこReact.js触っているのですが、action内でstateを参照できる方法を知って、劇的に世界が広がった気がしたのでその方法を備忘録程度に掲載したいと思います。

今までの実装

今までaction内でstateにアクセスする場合、こんな感じで記述していました。

import {playMusic} from './playMusic'

//componentからstateを渡してあげる
export const playNextMusic = (state) =>{
    const searchList = state.searchList
    let nextFlg = false
    let nextVideoId = ""
    searchList.some((v,i) =>{
      if(nextFlg){
        nextVideoId = v.videoId
        return true
      }
      if(v.playing == true)
        nextFlg = true
    })
    return {
      type: 'NEXT_MUSIC',
      resutl: searchList
    }
  }
}

こんな感じですね。
componentからstateを渡してあげて、actionで参照するといった感じです。
「動く」ことはしますが、componentで無駄な「stateを渡す」といった処理を記述する必要があり、システムが大きくなるとなかなか厳しいものがありました。

劇的に世界が広がった実装

そこでいろいろ調べていると、下記のような形で実装している例を見つけました。

import {playMusic} from './playMusic'

export const playNextMusic = () =>{
  return (dispatch,getState) =>{
    //次の動画を抽出する
    const searchList = getState().searchList
    let nextFlg = false
    let nextVideoId = ""
    searchList.some((v,i) =>{
      if(nextFlg){
        nextVideoId = v.videoId
        return true
      }
      if(v.playing == true)
        nextFlg = true
    })
    dispatch(playMusic(nextVideoId))
  }
}

このようにすることで、componentから無駄なstateを渡す必要がなく、「更新に必要な情報のみを渡す」といった実装ができるので大変便利です。
また、私の中で「stateの更新内容記述場所」をreducerかactionかで非常に悩んでいたんですが、この記述方法を知ったことで、完全に「action」とすることができるようになりました。
あと、「dispatch」も使用できる点も気にいっています。

おわりに

reduxのExample眺めていれば、この記述しているのに完全に見落としていた。。。
精進します(*´Д`)

フェルマーの最終定理に習うプログラマー人生

Gakuです(*´﹃`*)

日々ニート期間を満喫している次第であります。
ただ、ニートと言ってもぐだぐだしていると「非常に虚しい」感覚に陥ってしまうため、ちょこちょこいろんな勉強をしている次第であります。
今回は兼ねてから気になっていた「フェルマーの最終定理」について自叙伝的な本を読んだので、その感想を書かせて頂ければと思います。

これです。

そもそも「フェルマーの最終定理」とは

フェルマーの最終定理とは非常に簡単な数式で表されます。

x^n+y^n=z^n
nは0,1,2以外の整数の時、整数解は存在しない。

これを証明せよ!って問題ですね。めっちゃ簡単。中学生でも問題自体は理解できる(´・ω・`)

「フェルマーの最終定理」の前に「ピタゴラスの定理」

「フェルマーの最終定理」は日本の中学生時代に習う「ピタゴラスの定理」から着想を得た定理のため、ピタゴラスの定理を掲載しときます。

x^2+y^2=z^2
直角三角形の場合、底辺の2乗*高さの2乗は斜辺の2乗が成り立つ

例えば高さが3、底辺が4の直角三角形の斜辺の長さはいくつでしょう?という問題が出題されたりするのですが、ピタゴラスの定理に従うと簡単に求まります。

3^2+4^2=z^2
9+16=z^2
z^2=25
z=√25
z=5

てな感じで斜辺が5であることが算出されるわけです。
ここで大事なのは「フェルマーの最終定理」の数式上に出てくるnが2であれば整数解が存在する!ということです。
(※整数とは-1,0,1のような数字で分数や無理数(πや√2)ではないもの。わからなければ「きれいな数字」と理解頂ければOK)

「フェルマーの最終定理」の奥深さ

ピタゴラスの定理から考えてnが2の時であれば、なんとなく「無数に整数解が存在しそう」な感じです。
(※実際、無限に続く数字の中に整数解は無数に存在する)

こんな状況なのに、フェルマーさんはなんと「nが3以上となるなら整数解は1つも存在しない」と言うわけですね。はい。

実際やってみればわかるのですが、

x^3+y^3=z^3

に合致する整数ってのは一つも存在しないです。
はたまた無限に続くnをいくら変えても、整数解は存在しないというからびっくりです。

そして死にゆくフェルマーさん

フェルマーさんはこの定理以外にもいくつもの未証明の定理を残して死んでしまったため、世紀の大問題が生まれたわけです。
フェルマーの最終定理以外にもフェルマーの素数定理とかいろいろあったっぽいですが、最後に残ったものが「フェルマーの最終定理」だったわけです。

この問題に関わった人

情報学を先行した人なら誰でもお世話になったことがある、かの有名なオイラーさんもこの問題に取り組んだようですが、最終的には証明できなかったようです。
(その代わり、フェルマーの素数定理は証明した模様。おそるべしオイラーさん。)

そしてフェルマーさん死去300年以上がたつ

フェルマーの最終定理の証明は解けぬまま、数多くの数学者が関わってきたのですが、最後に「ワイルズさん」という人がこの問題に終止符を打つわけです。
その過程の苦労、数学の美しさなどが本当に鮮明に描かれた本でした。

数学は美しい

久しぶりに「数学」に触れて、美しさ!エレガントさ!がひしひしと伝わって来た本でした。
この感動を誰かにわかってもらいたく、少し理系寄りの妹に話たのですが

「ものすごく気持ち悪がられました。」

あまり、事情を知らない人には話さない方が良いと再認識したわけですが、本当に良い本ですのでおすすめです。
(※数学の知識は皆無でも読めます。)

プログラムの美しさ

数学に美しさがあるように、プログラムにも美しさがあると思っています。

「美しいと感じるプログラムを読んだ時」
「美しいと感じるプログラムを書いた時」
「美しいと感じるプログラムが動いた時」

なんとも言えない感動が芽生えることは事実です。
この抽象的で良くわからない言葉である「美しさ」ですが、数学とプログラミングには数多くの共通点が存在すると感じられました。

さいごに

学生の時、「オイラーの定理」に触れてものすごく感動した記憶があるのですが、今回この本を読んで、少し「数論」を趣味にするのもありかと思っている今日このごろです(´・ω・`)