院卒新人サラリーマンのメモ代わり

備忘としてのメモを記載

2018-09-01から1ヶ月間の記事一覧

phina.jsで遊ぶ

ゲーム作りってプログラミングの勉強にすごく良い気がする。 当たり判定やマップの移動などなかなかややこしい。

配列、オブジェクトの追加の際の戻り値

配列やオブジェクトに要素を追加して自分自身を戻したい時 arr.push('a') => 戻り値は新しい配列の要素数 arr.concat('a') => 戻り値は新しい配列 obj['a'] = 1 => 戻り値は代入した値 Object.assign(obj, {'a' : 1}) => 戻り値は新しいobj 使い分けるときれ…

深さ優先

探索を中断する条件も追加してみた。 (ナイト巡回問題でいう一度行ったとこが含まれてたらダメみたいな条件) getNextNodeのとこにisSuspendをうまく混ぜられたらいいなと思ったけど、難しそうだったのでとりあえずこれで let dep = lst => { let isFinishe…

幅 深さ

参考記事 JSで幅優先探索・深さ優先探索アルゴリズムを5行で実装してみた 深さ優先探索と幅優先探索の簡単な実装方法 - 働かないプログラマのメモ帳 //幅 const que = [targetNode]; while (que.length > 0) { const row = que.shift(); if (row.children) r…

深さ優先探索っぽい順列

reasonMlによる順列 まぁまぁきれいにできた気がする。 終了条件と次のノードのとこをいじればいろいろできるよう抽象化できた。 let permu = (count, lst) => { let isFinished = acc => List.length(acc) == count; let getNextNode = (cur, l) => List.fi…

javascriptでパターンマッチ

javascriptで関数型言語でいうパターンマッチが使いたい matches.jsってのがまさにそれなんだけど6年前に更新が止まってる。 GitHub - natefaubion/matches.js: Powerful pattern matching for Javascript const match = require('matches').caseOf const te…

ゲーム処理の流れ

個人的な名前の付け方のまとめmain関数frameNo : 現在のゲームの状態を入れる switchを用いて、update関数を切り替える(以下切り替え先をframe関数と呼ぶ) frameNoはswitch内で切り替える_関数名 : 引数のみで完結(インスタンス変数にアクセスしない) 主…

phina.jsでブロック崩し

【phina.js】ゲーム作成チュートリアル(ブロック崩し)第1回=ブロックの配置= を参考に(というかまるぱく)してブロック崩しを作った。で、リファクタリングしながら概要を把握した。状態によってメインの処理を切り替える。 メイン以外の処理はアンダー…

状態別処理

今までは isStarted : bool isFinished : bool とかで管理してたんだけどframeNo : str で管理して更新処理されるところでswitchで切り分けるととても見やすい。

はじめて学ぶenchant.js読了

飛ばし飛ばしで読了 感想 enchant.jsを使うと簡単にゲームが作れるんだなー こういったゲームはこう作るんだなーってのが知れる。 たくさんのサンプルを作りながら学ぶっていうテーマは良いと思う。 ただコードが汚いから、ファイルや関数でうまく分割されて…

enchant.jsを学ぶ

javascriptの勉強のためにenchant.jsを学ぶ。この本は2018年に改訂2版が発売されてる。 でも、enchant.jsの開発が3年くらい前で止まってることが述べられてない。 書き方もes6に対応していない。僕はjavascriptを学びたいだけだからいいけど、ゲームを作りた…

pugは一度使ったら抜けられない

初めは気持ち悪いと思っていたpugだけど、一度使ったらpugなしじゃ生きていけなくなった。 タイプ量が少ない、読みやすい、修正しやすいrailsにはslimっていうpugとほぼ同じ文法のがある。 これ使うとeachとかがめっちゃきれいに書ける。 erbで頑張ってたの…

抽象度が低いほうがわかりやすい(reduce)

それぞれの要素に対してした処理をまとめるにはreduceが良いと前書いたけど mapとconcatでも書ける場合はこっちのほうがよい。抽象度が低いから理解しやすい。 reduceは何でも出来ちゃうからイメージしづらい。追記 jsとocamlでconcatの意味が違かった ocaml…

vuexをmodelとして扱う

前vueでcrud作ったときは各ページでajaxでdbからデータを取り出してた。 そうじゃなくvuexにdbから取り出すgetterを作ってそれを利用する法が良いかも。こうしたらrailsのmodelっぽくなってイメージしやすくなる。

vuexまとめ

vuexの書き方をよく忘れるからまたまとめる。 const モジュール名 = { namespaced: true, state: { キー: バリュー , }, mutations: { メソッド名(state) { 処理 } }, } export default new Vuex.Store({ modules: { モジュール名, }, }) <script> import { mapState…

トップダウンで構築する

ocamlの本で学んだこと メイン関数で他の処理(サブ関数)が必要になったとき サブ関数のヘッダーだけ作ってメイン関数の実装し終える。 ヘッダーさえ出来ていればサブ関数の実装が終わってなくてもメイン関数は作れる。 その後、サブ関数を実装する。 この考…

インデントにこだわってみる

今までインデントはデフォルトのままスペース2つを使っていた。 たまたまスペース4つのコードと触れる機会がありそっちになれるとスペース4つのほうが読みやすい気がしてきた。ということでスペース4つに変更してみる。あとスペース4つだと横に長くなるから1…

プログラミングができるとは

プログラミングってすごいスキルが必要なのかと思ってたけどそうじゃないのかも。 問題を適切な要素に分解して、こんがらがらずにできれば大概のものは作れるかも。 (フロントエンドの話です)となると作り始める前に全体像を把握するのがとても大切な気が…

rails-apiを使う

フロントはvue.jsを使いたいからサーバはdbだけでいいやと思ったのでrails-apiを使ってみた。 クロスオリジンとか出てきていろいろ詰まった。 これだけでイイ、Rails5でAPIサーバを作るときのCORS設定 ここを参考にしたら動いた。とりあえず、これでいろいろ…

javascriptのpushの戻り値に注意

javascriptでuniqメソッドを実装してみようしたら動かなかった let uniq = arr => { return arr.reduce((acc, cur) => { return acc.includes(cur) ? acc : acc.push() }, []) } 理由:pushの戻り値は新しい配列ではなく、その配列の長さだから let arr = ['…

カリー化

カリー化とは 「引数を複数受け取る関数」を「引数を段階的に受け取る関数」に分解する let add = (n, m) => { return n + m } let addCurry = n => { return m => { return n + m } } //呼び出し方 add(3,4) addCurry(3)(4) これだけだとあんまり利点を感じ…

javascriptを使って関数型プログラミングを学ぶ

半分ぐらい読んだ。 序盤のラムダ計算から関数型プログラミングを説明するところはとても良い。 ただ、中盤ではjavascriptに無理やりパターンマッチングを導入し説明している。 ここのせいでコードが読みづらいし、直感的にわかりにくくなってる。「javascri…

プログラミング英単語3

predicate 意味:述語日本語の述語には2つ意味がある 1つ目は主語と述語。動詞とほぼ同義。 2つ目は数学用語の述語。 こっちの意味は 変数 x の値を定めることで真偽を判定することができる主張を 『 述語 』 という。 命題論理と述語論理プログラミングに…

mapとreduce

抽象度 reduce > mapどう使い分ける map 配列の各要素に関数を当てた配列を返すとき 注目するのはその要素に何をするかだけ (map_sqrt : list(int) => list(int), map_mod2 : list(int) => list(bool) )reduce 1,配列をなにかに変換するとき (sum : list(i…

再帰の使い方まとめ

1,漸化式を表現する // f(n)をf(n-1)を使って表せたら再帰関数は作れる // a(0) = 3 // a(n) = 2 * a(n-1) -1 let rec a = n => switch (n) { | 0 => 3 | _ => 2 * a(n - 1) - 1 }; // 1からnまでの総和 // sum(0) = 0 // sum(n) = n + sum(n-1) // 素数判定…

99 problemについて

途中からだいぶ数学チックになってきた。 ちょっと飛ばそう。 あとコードが汚い気がする。 Q31,素数か判定する関数の答え let is_prime = n => { let n = abs(n); let rec is_not_divisor = d => d * d > n || n mod d != 0 && is_not_divisor(d + 1); n != …

プログラミング英単語

extract 抜き出す、取り出すextract(n, lst) lstからn番目だけ抜き出す 例) extract(3, ["a","b","c","d","e"]) = ("c", ["a","b","d","e"])

99 problems Q14,15,18

# duplicate ["a";"b";"c";"c";"d"];; - : string list = ["a"; "a"; "b"; "b"; "c"; "c"; "c"; "c"; "d"; "d"] これはそのままhdを2回追加すれば良いだけだから簡単。 ただこれの回数が可変になると一気に変わる。 # replicate ["a";"b";"c"] 3;; - : strin…

RWO 中断

全体をさらっと見てみて求めていたものと違う気がする。 ocamlの仕様を知って何かを作りたいわけではないから、詳細いらないや。 あとツールを作るところも別に魅力を感じなかった。ということでRWOは中断し99 probolemsを解く。

Real World OCaml を読み始める

Prologueを読んだ。 気が向いたら少しずつ読んでこう。ocamlを学ぶと他の言語を使っていても役に立つ考え方が身につくよ。 part1はocamlの基礎 part2はコマンドラインツールから非同期通信まで便利なツールを作るよ part3はコンパイラのシステムを説明するよ…