足機能プログラミングで自分を撮影ですか?
9609 ワード
以下のアンチパターンをしないでください、それを関数プログラミングまたは機能的なスタイルまたは現代JSの構文を呼び出す!
匿名関数
はい、匿名の機能は、マシーオタクを見ますが、彼らは名前のない関数です.したがって、以下のことには何の価値もありません.
匿名関数のエクスポート🥺
悪の真の化身だけがコードベースで安全に検索できないコードを書くでしょう.
名前付きエクスポート
それは鈴を鳴らしますか.私も、それにもう一つの現実的なねじれを作りました:その恐ろしい機能で働く必要があるのに不運だった人は、タイポを作りました.今、同僚Bが関連するバグを調査するために来て
通常使用しないと主張する人々
ため息.
匿名関数の作成
どのように地獄が私はこの列車の残骸を知っている私はすべてのgoddamn関数のすべてのgoddamn戻り値を見ていない場合は関係ありません:
なぜパラメータをスキップする必要があるのでしょうか
ルック
要するに:パラメータリストは、現在通勤です.
無名の関数に戻るには、なぜ何か意味のあることを返すことができますか?
だから、これをしないでください、関数は、彼らが何を行うかを指定せずに呼び出すことができる関数を返す
匿名関数のネーミング
あなたが匿名の機能が何であるか、そして、何でないかについてわかっているならば、技術的に彼らを利用することに関して間違った何もありません.しかし、なぜ名前を持っていないことを意味した何かを名前ですか?
特別な場合は、それらを使用してトータルセンスを:この素晴らしい参照してくださいopinion piece カイルシンプソンによって
匿名関数
はい、匿名の機能は、マシーオタクを見ますが、彼らは名前のない関数です.したがって、以下のことには何の価値もありません.
匿名関数のエクスポート🥺
悪の真の化身だけがコードベースで安全に検索できないコードを書くでしょう.
// in evil-function.js file
// this looks so mathy, I am mentally superior to my peers
export default (name) => console.log(`Try importing this with your IDE, ${name}`);
// in any other file
import evilFunction from './evil-function';
// in another file (note `el typo`)
import evilFunctino from './utils/evil-function';
それで、IDEはすべての利用可能なアイテムのマップの種類を持つことによってあなたの意図を理解するでしょう.名前付きエクスポート
それは鈴を鳴らしますか.私も、それにもう一つの現実的なねじれを作りました:その恐ろしい機能で働く必要があるのに不運だった人は、タイポを作りました.今、同僚Bが関連するバグを調査するために来て
evil-function
, 彼らはimport evilFunction
すべての用法を見つけるために.そして、それらはタイプミスを持つものを除いて見つけるでしょう🥺. あるいは誰かが同義語を使ったときsatanicFunction
.通常使用しないと主張する人々
TypeScript
なぜなら、それらの関数の正確な入力と正確な出力が何であるかを知るよりも速くコードを書くからです.ため息.
匿名関数の作成
どのように地獄が私はこの列車の残骸を知っている私はすべてのgoddamn関数のすべてのgoddamn戻り値を見ていない場合は関係ありません:
const myComputedValue = (stuff) => (_, factoryFn) =>
addLayer(stuff)({
x: 134,
y: 134}
)({ moreStuff: stuff.otherStuff })
(factoryFn('LayerObject'), true);
一体全体この糞は何ですか.これは関数型プログラミングではないcode-obfuscation .なぜパラメータをスキップする必要があるのでしょうか
_
? もし私がパラメータの順序を忘れて(factoryFn, _)
? なぜ関数のインタフェースのデザインが私のパラメータを指定しないのか?ルック
function objectCreator({ options, factoryFn } = {
options: { cloneValues: true }
}) {
// ...
}
// usage:
objectCreator({ factoryFn }); // can't miss it
// the equivalent of objectCreator(factoryFn, _) would be this nonsense:
// you would never write it...
objectCreator({ options: factoryFn, factoryFn: undefined });
我々は機能のインターフェイスを改善していることに注意してください:パラメータの順序を自由に交換することができますが、値を使用することもできません省略することができます.要するに:パラメータリストは、現在通勤です.
無名の関数に戻るには、なぜ何か意味のあることを返すことができますか?
const prepareForUpload = (x, y) => {
const transformedValue = { name: x, value: y };
return (x) => api.upload(x);
};
// What does the second thing do?
// You have to check the function definition.
prepareForUpload('Robert', '2$')();
// or do this:
function prepareForUploadWithObject(x, y) {
const transformedValue = { name: x, value: y };
return {
upload: () => api.upload(transformedValue)
}
}
// clear immediately
prepareForUploadWithObject('Robert', '200$').upload();
バージョン2はまだ機能的プログラミングとして通るか?はい!しかし、それが本当に何をより明確に!だから、これをしないでください、関数は、彼らが何を行うかを指定せずに呼び出すことができる関数を返す
ultimate cringe
.If you are too busy to type some extra characters you will be very busy double checking everything.
匿名関数のネーミング
あなたが匿名の機能が何であるか、そして、何でないかについてわかっているならば、技術的に彼らを利用することに関して間違った何もありません.しかし、なぜ名前を持っていないことを意味した何かを名前ですか?
const anonymousWorkerFunction = (stuff) => {
//... 20 lines of code
};
// vs
function doSomeWork(stuff) {
//... 20 lines of code
}
const
変数は、それらが定義されているブロックに存在し、また、それらがanonymousWorkerFunction
あなたがそれを定義する前に、あなたはジューシーUncaught ReferenceError: Cannot access 'anonymousWorkerFunction' before initialization
.特別な場合は、それらを使用してトータルセンスを:この素晴らしい参照してくださいopinion piece カイルシンプソンによって
getify
.Reference
この問題について(足機能プログラミングで自分を撮影ですか?), 我々は、より多くの情報をここで見つけました https://dev.to/latobibor/is-shooting-yourself-in-the-foot-functional-programming-351jテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol