足機能プログラミングで自分を撮影ですか?


以下のアンチパターンをしないでください、それを関数プログラミングまたは機能的なスタイルまたは現代JSの構文を呼び出す!

匿名関数
はい、匿名の機能は、マシーオタクを見ますが、彼らは名前のない関数です.したがって、以下のことには何の価値もありません.

匿名関数のエクスポート🥺
悪の真の化身だけがコードベースで安全に検索できないコードを書くでしょう.
// 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 .