質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

453閲覧

ramda.js のデバッグ

tommyTeratail

総合スコア31

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/04/11 10:28

編集2018/04/11 11:43
  1. R.tapの中で処理中の値がみたいです。
  2. 可能であれば、R.pipe内の変数もみたいです
  3. おすすめのデバッグ方などあればおねがします

myFuncを修正して見れるようでしたらお願いします

js

1import * as R from 'ramda'; 2 3const data = {a: 1, b: 2, c: 3, d: 4} 4const data2 = ['a', 'c']; 5 6// 自作のメソッド 7const myFunc = v => v * v 8 9// !! pipeは引数1つの方が正しいの `かも` しれません 10const main = R.pipe( 11 R.pickAll, 12 R.values, 13 14 R.tap(v => { 15 // 処理中の値を見たい 16 17 // console.log(v) 18 // console.log(arguments) 19 // console.log(this) 20 // console.log(R.__); 21 }), 22 R.sum, 23 myFunc, 24); 25 26main(data2, data)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

R.tapはよほどの事がない限り、基本的にはR.tap(console.log)を好きな箇所に挿入して使う感じになります。
どうせ基本的には第一引数以外見ませんからね。

質問文のargumentsやthisが宣言されてないのは、
アロー関数はこれらの暗黙的な変数を作らないからです。
これはES2015の罠なのでハマったら思い出してください。

R.tap(function(){ console.log(arguments) })という風に明示的に書けばアクセス出来るでしょう。
まぁ、見たところでpipeは戻り値1個を持って返ってきて、次の関数を引数1個で叩く設計なのであんまり意味ないと思いますけど。


【おまけ】

JavaScript

1// 自作のメソッド 2const myFunc = v => v * v

これは効率はともかくRamda.jsで作れますね。
俗に言うポイントフリースタイルってやつです。

JavaScript

1const myFunc = R.pipe( 2 R.repeat(R.__, 2), 3 R.product 4) 5console.log(myFunc(10)) // 100 6console.log(myFunc(12)) // 144

なのでmyFuncを消しちゃってこういう風にしても同じ動きすると思いますよ。

JavaScript

1const main = R.pipe( 2 R.pickAll, 3 R.values, 4 R.tap(v => { 5 // 処理中の値を見たい 6 // console.log(v) 7 // console.log(arguments) 8 // console.log(this) 9 // console.log(R.__); 10 }), 11 R.sum, 12 R.repeat(R.__, 2), 13 R.product 14)

【おまけのおまけ】

ポイントフリースタイルはかっこいいですが、
潔癖になりすぎるとキモいコードになってしまいます。
特に出入り口の型は意味不明にならないように気をつけてくださいね!

引数や型はこんな感じでコメントで明示したり、
引数2つとる関数で包んでおいたほうが後々のコードリーディングで楽だと思います。
今回は両方の対応してますが、片方だけでも良いと思います。

JavaScript

1// この書き方はHaskellの書式を参考にしています。Ramda.jsのドキュメントでも関数名タイトルのすぐ下に同じ表記の物がありますね。 2// main :: Array -> Object -> Number 3const main = R.curry((data2, data) => R.pipe( 4 R.pickAll(data2), 5 R.values, 6 R.sum, 7 R.repeat(R.__, 2), 8 R.product 9)(data))

投稿2018/04/11 10:59

編集2018/04/11 11:29
miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tommyTeratail

2018/04/11 11:13

> R.pipeには1個しか引数を設定できないので なぜか、下記状態で動いていたので気がつきませんでした、、 https://goo.gl/H1uSv6 たしかに引数は1つですね
tommyTeratail

2018/04/11 11:15

処理中の変数の中身を、console.logで見たい場合は R.tap(console.log) を差し込むのが、良いでしょうか? 暗黙的な変数があるかなと思っていました
tommyTeratail

2018/04/11 11:17

R.__の使い方も気になっていたので、サンプルコードありがとうございます
miyabi-sun

2018/04/11 11:17

へー、いけるんですね! じゃあ嘘書いてるからばっさり消しておきます。
tommyTeratail

2018/04/11 12:13

おまけのおまけは、大事ですね 引数のbind + 明示的で読みやすいです
miyabi-sun

2018/04/11 12:22

> https://goo.gl/6vCKuR R.pipeは2つの引数を受け流してくれるけど、 R.tapが最初に束縛した関数と、第一引数しかいらんぞっていう使い方してるから削られちゃったような気がしますね。
tommyTeratail

2018/04/11 12:27

pipeはよく使うと思うので、公式をしっかり見直します
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問