My concern about no classification by Procedural/Imperative and Functional programming Paradigm
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 25/100
- issue の種類
- ドキュメント
- 明瞭さ
- おおむね明確
- 活発さ
- 停滞
- 技術スタック
- javascript
調査の方向性
Start by reading the README and the factorial example under /algorithms/math/factorial, then review the issue discussion for any settled direction. Done means documenting an agreed classification approach for algorithm programming paradigms and clarifying how contributors should apply it.
索引モデルが issue の本文から書いたものです。
説明
Hi, this is a great project. Thanks.
I have a concern that I would like to share.
For instance, looking at /algorithms/math/factorial which is one of the most basic math topic:
https://github.com/trekhleb/javascript-algorithms/tree/master/src/algorithms/math/factorial
I found 2 implementations:
factorial.js
export default function factorial(number) {
let result = 1;
for (let i = 2; i <= number; i += 1) {
result *= i;
}
return result;
}
factorialRecursive.js
export default function factorialRecursive(number) {
return number > 1 ? number * factorialRecursive(number - 1) : 1;
}
factorial.js is a code of Procedural/Imperative programming style, and uses mutable variables.
factorialRecursive.js is recursive, and can be said functional programming style, immutable. Alghouth this is a typical implementation which I can see everywhere, in terms of "Big O notations". this is rather anti-pattern.
A better or I would say, a proper way is,
factorialFunctional.js
//[...Array(5).keys()]
//-> [ 0, 1, 2, 3 ,4 ]
const natural = n => {
const arr0 = [...Array(n + 1).keys()];
const [first, ...arr] = arr0;
return arr;
};
console.log(
natural(5) //[ 1, 2, 3, 4, 5 ]
);
function factorialFunctional(number) {
const list = number < 1
? [1]
: natural(number)
const multiply = (a, b) => a * b;
return list.reduce(multiply);
}
console.log(
factorialFunctional(5)//120
);
This is as efficient as the factorial.js in terms of "Big O notations", and immutable.
I think when algorithms are presented, it's significantly important to clarify what kind of programming paradigm the algorithms are based on.
Currently, it seems the contributions are updated randomly without formal classification for them, and I think it's a good idea to show a guideline in the README that to clarify which paradigm every algorithm belongs to. In this manner, a contributors notice "oh, here, there is no Functional or Imperative pattern yet, so I will add.."
Thanks.
- 主要言語
- JavaScript
- スター
- 197k
- フォーク
- 31k
- PR マージ指標
- 30日以内にマージされた PR はありません
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
trekhleb/javascript-algorithms のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
trekhleb/javascript-algorithms#2102 · コメント 1 件 ·
-
難易度 4/5 3〜5日 初心者へのやさしさ 25/100
trekhleb/javascript-algorithms#2085 · コメント 6 件 · リアクション 1 件 ·
-
LinkedList methods. オープン
難易度 3/5 1〜2日 初心者へのやさしさ 35/100
trekhleb/javascript-algorithms#2065 · コメント 1 件 ·
-
難易度 3/5 1〜2日 初心者へのやさしさ 55/100
trekhleb/javascript-algorithms#2057 · コメント 1 件 ·
-
難易度 3/5 1〜2日 初心者へのやさしさ 35/100
trekhleb/javascript-algorithms#2056 ·
trekhleb/javascript-algorithms の issue をすべて見る
似ている issue
-
enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
babalae/bettergi-scripts-list#3674 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
vadimdemedes/ink#1029 ·
-
code-quality refactoring
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
github/gh-aw-firewall#8816 ·
-
integration:quickjs org:external priority:backlog topic:code-interpreter topic:middleware type:feature
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
langchain-ai/deepagents#6450 ·
-
optimization optimization:agents-md-curator
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
githubnext/gh-aw-cao#13143 ·