Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 18 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,22 @@

Learn to code with version control system using Git. There are several study case and code example we can use to expertise our skill on Git, such as:

- [x] [Basic](pages/basic/index.html)
- [x] Functional Programming
- [x] [Factorial - Functional](pages/functional/factorial.html)
- [x] [Fizz Buzz - Functional](pages/functional/fizz-buzz.html)
- [x] [Palindrome - Functional](pages/functional/palindrome.html)
- [x] [Fibonacci - Functional](pages/functional/fibonacci.html)
- [x] Object Oriented Programming
- [x] [Factorial - OOP](pages/oop/factorial.html)
- [x] [Fizz Buzz - OOP](pages/oop/fizz-buzz.html)
- [x] [Palindrome - OOP](pages/oop/palindrome.html)
- [x] [Fibonacci - OOP](pages/oop/fibonacci.html)
- [x] [Standard Library](pages/standard-library/index.html)
- [x] [Modules](pages/modules/index.html)
- [x] [Asynchronous](pages/asynchronous/index.html)
- [X] [Basic](pages/basic/index.html)
- [X] Functional Programming
- [X] [Factorial - Functional](pages/functional/factorial.html)
- [X] [Fizz Buzz - Functional](pages/functional/fizz-buzz.html)
- [X] [Palindrome - Functional](pages/functional/palindrome.html)
- [X] [Fibonacci - Functional](pages/functional/fibonacci.html)
- [X] Object Oriented Programming
- [X] [Factorial - OOP](pages/oop/factorial.html)
- [X] [Fizz Buzz - OOP](pages/oop/fizz-buzz.html)
- [X] [Palindrome - OOP](pages/oop/palindrome.html)
- [X] [Fibonacci - OOP](pages/oop/fibonacci.html)
- [X] [Standard Library](pages/standard-library/index.html)
- [X] [Modules](pages/modules/index.html)
- [X] [Asynchronous](pages/asynchronous/index.html)
- [ ] [Node.js](pages/nodejs/index.html)
- [x] [Standard Library](pages/nodejs/standard-library/index.html)
- [X] [Standard Library](pages/nodejs/standard-library/index.html)

You can add your own study case into the list above by contributing to this repository. See [Contributing](#contributing) section for more information.

Expand Down Expand Up @@ -61,6 +61,7 @@ Please see [CONTRIBUTING](CONTRIBUTING.md) for details.
- [ianriizky/rwid-git](https://github.com/ianriizky/rwid-git)
- [sdesakt/rwid-challenge](https://github.com/sdesakt/rwid-challenge)
- [dianprsty/rwid-git](https://github.com/dianprsty/rwid-git)
- [JayaMustika/rwid-gi](https://github.com/JayaMustika/rwid-git)t
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wrong github URL.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aman sudah diperbaiki Mas

- **and more...**

## License
Expand All @@ -69,6 +70,6 @@ The MIT License (MIT). Please see [License File](LICENSE.md) for more informatio

## Credits

| Role | Name |
| ------ | -------------------------------------------------------- |
| Role | Name |
| ------ | ----------------------------------------------------- |
| Author | [Septianata Rizky Pratama](https://github.com/ianriizky) |
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
8 changes: 7 additions & 1 deletion pages/asynchronous/fetch_api/generateMember.js
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
export { member as m12 } from "../../modules/generateMember12.js";
export { member1 as m1 } from "./helper/generateMember1.js";
export { member2 as m2 } from "./helper/generateMember2.js";
export { member3 as m3 } from "./helper/generateMember3.js";
export { member4 as m4 } from "./helper/generateMember4.js";
export { member5 as m5 } from "./helper/generateMember5.js";
export { member6 as m6 } from "./helper/generateMember6.js";
export { member7 as m7 } from "./helper/generateMember7.js";
2 changes: 1 addition & 1 deletion pages/asynchronous/fetch_api/generateTrElement.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@ export function generateTrElement(data = {}, tbodyTarget = "repo-tbody") {
row.insertCell(2).innerHTML = data?.github_url
? `<a href=${data?.github_url}>${data?.github_url}</a>`
: "";
row.insertCell(3).textContent = data?.visibility;
row.insertCell(3).textContent = data?.public_repos;
row.insertCell(4).textContent = data?.created_at;
}
32 changes: 32 additions & 0 deletions pages/asynchronous/fetch_api/helper/Member.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { Person } from "./Person.js";
import { generateTrElement } from "../generateTrElement.js";

export class Member extends Person {
/** @type {number} */
index;

/** @type {string} */
address;

/** @type {string} */
sim_batch;

/** @type {string} */
github_url;

/**
* @param {string} name
* @param {number} index
* @param {string} address
* @param {string} sim_batch
* @param {string} github_url
*/
constructor(name, index, username, sim_batch, github_url) {
super(name);

this.index = index;
this.username = username;
this.sim_batch = sim_batch;
this.github_url = github_url;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ export class Person {
name;

/**
* @param {Person["name"]} name
* @param {string} name
*/
constructor(name) {
this.name = name;
Expand Down
12 changes: 12 additions & 0 deletions pages/asynchronous/fetch_api/helper/generateMember1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { Member } from "./Member.js";

const member1 = new Member(
"Jaya Mustika",
1,
"JayaMustika",
"07",
"https://github.com/JayaMustika"
);


export { member1 };
11 changes: 11 additions & 0 deletions pages/asynchronous/fetch_api/helper/generateMember2.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { Member } from "./Member.js";

const member2 = new Member(
"Muchamad Faiz",
3,
"muhammadfaiz",
"01",
"https://github.com/muchamadfaiz"
);

export { member2 };
11 changes: 11 additions & 0 deletions pages/asynchronous/fetch_api/helper/generateMember3.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { Member } from "./Member.js";

const member3 = new Member(
"Ady Bagus",
4,
"itsmeeep",
"07",
"https://github.com/itsmeeep"
);

export { member3 };
11 changes: 11 additions & 0 deletions pages/asynchronous/fetch_api/helper/generateMember4.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { Member } from "./Member.js";

const member4 = new Member(
"Bagus Irawan",
5,
"oombagus",
"6",
"https://www.github.com/oombagus",
);

export { member4 };
11 changes: 11 additions & 0 deletions pages/asynchronous/fetch_api/helper/generateMember5.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { Member } from "./Member.js";

const member5 = new Member(
"Riky Ridho Pangestu",
8,
"ridhoriky",
"02",
"https://github.com/ridhoriky"
);

export { member5 };
12 changes: 12 additions & 0 deletions pages/asynchronous/fetch_api/helper/generateMember6.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { Member } from "./Member.js";

const member6 = new Member(
"Abdurrochman Alfian",
10,
"Alfian-IDN",
"10",
"https://github.com/Alfian-IDN"
);


export { member6 };
11 changes: 11 additions & 0 deletions pages/asynchronous/fetch_api/helper/generateMember7.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { Member } from "./Member.js";

const member7 = new Member(
"Bambang Rewanggi",
11,
"Rewanggi",
"08",
"https://github.com/Rewanggi"
);

export { member7 };
4 changes: 2 additions & 2 deletions pages/asynchronous/fetch_api/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ <h1>GitHub API</h1>
<th>No.</th>
<th>Nama</th>
<th>GitHub URL</th>
<th>Visibility</th>
<th>GitHub Repos</th>
<th>Created At</th>
</tr>
</thead>
Expand All @@ -24,6 +24,6 @@ <h1>GitHub API</h1>

<p><a href="../index.html">Back to Asynchronous</a></p>

<script type="module" src="main.mjs"></script>
<script type="module" src="main.js"></script>
</body>
</html>
Original file line number Diff line number Diff line change
@@ -1,6 +1,50 @@
import * as member from "./generateMember.js";
import { generateTrElement } from "./generateTrElement.js";

/**
* @param {import("../../modules/Member.js").Member} member
* @returns {Promise<{ member: import("../../modules/Member.js")
* .Member; response: ResponseRepo; }>}
*/
async function fetchGitHubApi(member) {
const username = member.username

const promiseResponse = await fetch(
`https://api.github.com/users/${username}`,
);

return {
member,
response: await promiseResponse.json(),
};
}

function arrayOfMember () {
const members = [];

for (let index = 1; index <= 7; index++) {
members.push(member[`m${index}`]);
}

return members;
};

const members = arrayOfMember ();

const response = await Promise.all( //It doesn't work with .any and i don't know why, :)
members.map(member => fetchGitHubApi(member)),
);

response.forEach(({ member, response }) =>
generateTrElement({
index: member.index,
name: member.name,
github_url: member.github_url,
public_repos: response?.public_repos,
created_at: new Date(response?.created_at),
}),
);

/**
* @typedef {{ owner?: string; repo_name?: string; }} Repo
* @typedef {Array<Repo>} Repos
Expand Down Expand Up @@ -113,35 +157,4 @@ import { generateTrElement } from "./generateTrElement.js";
network_count: number;
subscribers_count: number;
}} ResponseRepo
*/

/**
* @param {import("../../modules/Member.js").Member} member
* @returns {Promise<{ member: import("../../modules/Member.js").Member; response: ResponseRepo; }>}
*/
async function fetchGitHubApi(member) {
const promiseResponse = await fetch(
`https://api.github.com/repos/${member.github_owner}/${member.github_repo}`,
);

return {
member,
response: await promiseResponse.json(),
};
}

const members = [member.m12];

const response = await Promise.all(
members.map(member => fetchGitHubApi(member)),
);

response.forEach(({ member, response }) =>
generateTrElement({
index: member.index,
name: member.name,
github_url: member.github_url,
visibility: response?.visibility,
created_at: new Date(response?.created_at),
}),
);
*/
46 changes: 18 additions & 28 deletions pages/functional/js/factorial.js
Original file line number Diff line number Diff line change
@@ -1,50 +1,40 @@
import { parseNumber } from "../../js/helper.js";

/**
* Count factorial number from the given "n" value using loop way.
*
* @param {number} n
* Factorial Iterative Approach
* @param {number} n
*/
function countFactorialUsingLoop(n) {
n = parseNumber(n);

let result = 1;
function factorialUsingLoop (n) {
let formula = n;

for (let index = n; index > 0; index--) {
result *= index;
for (let i = 1; i < n; i += 1) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please use a better variable naming instead of i as a non-expert will be confused by the meaning of this variable.

formula *= (n-i);
}

return result;
return formula;
}

/**
* Count factorial number from the given "n" value using recursive way.
*
* @param {number} n
* @returns {number}
*/
function countFactorialUsingRecursive(n) {
n = parseNumber(n);

if (n < 2) {
return 1;
}

return n * countFactorialUsingRecursive(n - 1);
* Factorial Recursive Approach
* @param {number} n
*/
function factorialUsingrecursive (n) {
return n <= 1
? 1
: factorialUsingrecursive (n - 1) * n;
}

/**
/**
* Count factorial number from the given "n" value.
*
* @param {number} n
* @param {"loop" | "recursive"} method
* @throws {Error}
*/
function countFactorial(n, method) {
if (method == "loop") {
return countFactorialUsingLoop(n);
return factorialUsingLoop(n);
} else if (method == "recursive") {
return countFactorialUsingRecursive(n);
return factorialUsingrecursive(n);
} else {
throw new Error("Method must be loop or recursive.");
}
Expand Down
Loading