Kaydet (Commit) 6cd08cb2 authored tarafından Ali GOREN's avatar Ali GOREN

Fix anchor 2

üst 278d9f4c
...@@ -39,7 +39,7 @@ const yyyymmdstr = moment().format('YYYY/MM/DD'); ...@@ -39,7 +39,7 @@ const yyyymmdstr = moment().format('YYYY/MM/DD');
```javascript ```javascript
const mevcutTarih = moment().format('YYYY/MM/DD'); const mevcutTarih = moment().format('YYYY/MM/DD');
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Aynı türde değişkenler için aynı kelimeleri kullanın ### Aynı türde değişkenler için aynı kelimeleri kullanın
...@@ -54,7 +54,7 @@ musteriKayitlariGetir(); ...@@ -54,7 +54,7 @@ musteriKayitlariGetir();
```javascript ```javascript
kullaniciGetir(); kullaniciGetir();
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Aranabilir isimler kullanın ### Aranabilir isimler kullanın
Yazacağımızdan daha fazla kod okuyacağız. Bu yazdığımız kodun okunabilir ve aranabilir olması açısından önemlidir. Değişkenleri kötü bir şekilde adlandırmayarak programımızı anlamaya çalışan kod okuyucularına zarar vermeyiz. İsimleri aranabilir yapın. [buddy.js](https://github.com/danielstjules/buddy.js) ve [ESLint](https://github.com/eslint/eslint/blob/660e0918933e6e7fede26bc675a0763a6b357c94/docs/rules/no-magic-numbers.md) gibi araçlar tanımlanmamış sabit değerleri constant olarak tanımlamanıza yardımcı olabilir. Yazacağımızdan daha fazla kod okuyacağız. Bu yazdığımız kodun okunabilir ve aranabilir olması açısından önemlidir. Değişkenleri kötü bir şekilde adlandırmayarak programımızı anlamaya çalışan kod okuyucularına zarar vermeyiz. İsimleri aranabilir yapın. [buddy.js](https://github.com/danielstjules/buddy.js) ve [ESLint](https://github.com/eslint/eslint/blob/660e0918933e6e7fede26bc675a0763a6b357c94/docs/rules/no-magic-numbers.md) gibi araçlar tanımlanmamış sabit değerleri constant olarak tanımlamanıza yardımcı olabilir.
...@@ -74,7 +74,7 @@ const BIR_GUNDEKI_MILISANIYELER = 86400000; ...@@ -74,7 +74,7 @@ const BIR_GUNDEKI_MILISANIYELER = 86400000;
setTimeout(havalandirmayiCalistir, BIR_GUNDEKI_MILISANIYELER); setTimeout(havalandirmayiCalistir, BIR_GUNDEKI_MILISANIYELER);
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Açıklayıcı değişkenler kullanın ### Açıklayıcı değişkenler kullanın
**Kötü:** **Kötü:**
...@@ -91,7 +91,7 @@ const sehirPostaKoduRegex = /^[^,\\]+[,\\\s]+(.+?)\s*(\d{5})?$/; ...@@ -91,7 +91,7 @@ const sehirPostaKoduRegex = /^[^,\\]+[,\\\s]+(.+?)\s*(\d{5})?$/;
const [, sehir, postaKodu] = adres.match(sehirPostaKoduRegex) || []; const [, sehir, postaKodu] = adres.match(sehirPostaKoduRegex) || [];
sehirPostaKodunuKaydet(sehir, postaKodu); sehirPostaKodunuKaydet(sehir, postaKodu);
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Zihinsel Haritalamadan Kaçının ### Zihinsel Haritalamadan Kaçının
Açık olan kapalı olandan daha iyidir Açık olan kapalı olandan daha iyidir
...@@ -122,7 +122,7 @@ lokasyonlar.forEach((lokasyon) => { ...@@ -122,7 +122,7 @@ lokasyonlar.forEach((lokasyon) => {
oneCikar(lokasyon); oneCikar(lokasyon);
}); });
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Gereksiz içerik eklemeyin ### Gereksiz içerik eklemeyin
Eğer sınıf ya da nesne adından ne yaptığı anlaşılıyorsa, tekrar olarak değişkenler içinde onu anlatan isimlendirmeler yapmayın. Eğer sınıf ya da nesne adından ne yaptığı anlaşılıyorsa, tekrar olarak değişkenler içinde onu anlatan isimlendirmeler yapmayın.
...@@ -152,7 +152,7 @@ function arabayiBoya(araba) { ...@@ -152,7 +152,7 @@ function arabayiBoya(araba) {
araba.renk = 'Kırmızı'; araba.renk = 'Kırmızı';
} }
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Kısa Mantıksal İfadeler ya da Koşullar Yerine Varsayılan Argümanlar Kullanın ### Kısa Mantıksal İfadeler ya da Koşullar Yerine Varsayılan Argümanlar Kullanın
Varsayılan argümanlar çoğunlukla kısa mantıksa ifadelerden daha temiz bir kullanıma sahiptir. Varsayılan argümanların sadece undefined argümanlar geçerliyse çalışacağını unutmayın. Diğer falsy olarak kabul edilen değerler varsayılan argümanı değiştirecektir. Bunlar `''`, `""`, `false`, `null`, `0`, ve `NaN` olarak gösterilebilir. Varsayılan argümanlar çoğunlukla kısa mantıksa ifadelerden daha temiz bir kullanıma sahiptir. Varsayılan argümanların sadece undefined argümanlar geçerliyse çalışacağını unutmayın. Diğer falsy olarak kabul edilen değerler varsayılan argümanı değiştirecektir. Bunlar `''`, `""`, `false`, `null`, `0`, ve `NaN` olarak gösterilebilir.
...@@ -173,7 +173,7 @@ function fabrikaOlustur(isim = 'Önceki Yazılımcı AŞ') { ...@@ -173,7 +173,7 @@ function fabrikaOlustur(isim = 'Önceki Yazılımcı AŞ') {
} }
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
## **Fonksiyonlar** ## **Fonksiyonlar**
### Fonksiyon Argümanları (İdeal olanı 2 ya da daha az) ### Fonksiyon Argümanları (İdeal olanı 2 ya da daha az)
...@@ -224,7 +224,7 @@ createMenu({ ...@@ -224,7 +224,7 @@ createMenu({
cancellable: true cancellable: true
}); });
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Functions should do one thing ### Functions should do one thing
...@@ -259,7 +259,7 @@ function isActiveClient(client) { ...@@ -259,7 +259,7 @@ function isActiveClient(client) {
return clientRecord.isActive(); return clientRecord.isActive();
} }
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Function names should say what they do ### Function names should say what they do
...@@ -284,7 +284,7 @@ function addMonthToDate(month, date) { ...@@ -284,7 +284,7 @@ function addMonthToDate(month, date) {
const date = new Date(); const date = new Date();
addMonthToDate(1, date); addMonthToDate(1, date);
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Functions should only be one level of abstraction ### Functions should only be one level of abstraction
When you have more than one level of abstraction your function is usually When you have more than one level of abstraction your function is usually
...@@ -352,7 +352,7 @@ function lexer(tokens) { ...@@ -352,7 +352,7 @@ function lexer(tokens) {
return ast; return ast;
} }
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Remove duplicate code ### Remove duplicate code
Do your absolute best to avoid duplicate code. Duplicate code is bad because it Do your absolute best to avoid duplicate code. Duplicate code is bad because it
...@@ -434,7 +434,7 @@ function showEmployeeList(employees) { ...@@ -434,7 +434,7 @@ function showEmployeeList(employees) {
}); });
} }
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Set default objects with Object.assign ### Set default objects with Object.assign
...@@ -480,7 +480,7 @@ function createMenu(config) { ...@@ -480,7 +480,7 @@ function createMenu(config) {
createMenu(menuConfig); createMenu(menuConfig);
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Don't use flags as function parameters ### Don't use flags as function parameters
...@@ -507,7 +507,7 @@ function createTempFile(name) { ...@@ -507,7 +507,7 @@ function createTempFile(name) {
createFile(`./temp/${name}`); createFile(`./temp/${name}`);
} }
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Avoid Side Effects (part 1) ### Avoid Side Effects (part 1)
A function produces a side effect if it does anything other than take a value in A function produces a side effect if it does anything other than take a value in
...@@ -552,7 +552,7 @@ const newName = splitIntoFirstAndLastName(name); ...@@ -552,7 +552,7 @@ const newName = splitIntoFirstAndLastName(name);
console.log(name); // 'Ryan McDermott'; console.log(name); // 'Ryan McDermott';
console.log(newName); // ['Ryan', 'McDermott']; console.log(newName); // ['Ryan', 'McDermott'];
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Avoid Side Effects (part 2) ### Avoid Side Effects (part 2)
In JavaScript, primitives are passed by value and objects/arrays are passed by In JavaScript, primitives are passed by value and objects/arrays are passed by
...@@ -601,7 +601,7 @@ const addItemToCart = (cart, item) => { ...@@ -601,7 +601,7 @@ const addItemToCart = (cart, item) => {
}; };
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Don't write to global functions ### Don't write to global functions
Polluting globals is a bad practice in JavaScript because you could clash with another Polluting globals is a bad practice in JavaScript because you could clash with another
...@@ -631,7 +631,7 @@ class SuperArray extends Array { ...@@ -631,7 +631,7 @@ class SuperArray extends Array {
} }
} }
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Favor functional programming over imperative programming ### Favor functional programming over imperative programming
JavaScript isn't a functional language in the way that Haskell is, but it has JavaScript isn't a functional language in the way that Haskell is, but it has
...@@ -685,7 +685,7 @@ const totalOutput = programmerOutput ...@@ -685,7 +685,7 @@ const totalOutput = programmerOutput
.map(output => output.linesOfCode) .map(output => output.linesOfCode)
.reduce((totalLines, lines) => totalLines + lines); .reduce((totalLines, lines) => totalLines + lines);
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Encapsulate conditionals ### Encapsulate conditionals
...@@ -706,7 +706,7 @@ if (shouldShowSpinner(fsmInstance, listNodeInstance)) { ...@@ -706,7 +706,7 @@ if (shouldShowSpinner(fsmInstance, listNodeInstance)) {
// ... // ...
} }
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Avoid negative conditionals ### Avoid negative conditionals
...@@ -731,7 +731,7 @@ if (isDOMNodePresent(node)) { ...@@ -731,7 +731,7 @@ if (isDOMNodePresent(node)) {
// ... // ...
} }
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Avoid conditionals ### Avoid conditionals
This seems like an impossible task. Upon first hearing this, most people say, This seems like an impossible task. Upon first hearing this, most people say,
...@@ -787,7 +787,7 @@ class Cessna extends Airplane { ...@@ -787,7 +787,7 @@ class Cessna extends Airplane {
} }
} }
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Avoid type-checking (part 1) ### Avoid type-checking (part 1)
JavaScript is untyped, which means your functions can take any type of argument. JavaScript is untyped, which means your functions can take any type of argument.
...@@ -812,7 +812,7 @@ function travelToTexas(vehicle) { ...@@ -812,7 +812,7 @@ function travelToTexas(vehicle) {
vehicle.move(this.currentLocation, new Location('texas')); vehicle.move(this.currentLocation, new Location('texas'));
} }
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Avoid type-checking (part 2) ### Avoid type-checking (part 2)
If you are working with basic primitive values like strings and integers, If you are working with basic primitive values like strings and integers,
...@@ -843,7 +843,7 @@ function combine(val1, val2) { ...@@ -843,7 +843,7 @@ function combine(val1, val2) {
return val1 + val2; return val1 + val2;
} }
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Don't over-optimize ### Don't over-optimize
Modern browsers do a lot of optimization under-the-hood at runtime. A lot of Modern browsers do a lot of optimization under-the-hood at runtime. A lot of
...@@ -868,7 +868,7 @@ for (let i = 0; i < list.length; i++) { ...@@ -868,7 +868,7 @@ for (let i = 0; i < list.length; i++) {
// ... // ...
} }
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Remove dead code ### Remove dead code
Dead code is just as bad as duplicate code. There's no reason to keep it in Dead code is just as bad as duplicate code. There's no reason to keep it in
...@@ -899,7 +899,7 @@ function newRequestModule(url) { ...@@ -899,7 +899,7 @@ function newRequestModule(url) {
const req = newRequestModule; const req = newRequestModule;
inventoryTracker('apples', req, 'www.inventory-awesome.io'); inventoryTracker('apples', req, 'www.inventory-awesome.io');
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
## **Objects and Data Structures** ## **Objects and Data Structures**
### Use getters and setters ### Use getters and setters
...@@ -958,7 +958,7 @@ function makeBankAccount() { ...@@ -958,7 +958,7 @@ function makeBankAccount() {
const account = makeBankAccount(); const account = makeBankAccount();
account.setBalance(100); account.setBalance(100);
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Make objects have private members ### Make objects have private members
...@@ -996,7 +996,7 @@ console.log(`Employee name: ${employee.getName()}`); // Employee name: John Doe ...@@ -996,7 +996,7 @@ console.log(`Employee name: ${employee.getName()}`); // Employee name: John Doe
delete employee.name; delete employee.name;
console.log(`Employee name: ${employee.getName()}`); // Employee name: John Doe console.log(`Employee name: ${employee.getName()}`); // Employee name: John Doe
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
## **Classes** ## **Classes**
...@@ -1073,7 +1073,7 @@ class Human extends Mammal { ...@@ -1073,7 +1073,7 @@ class Human extends Mammal {
speak() { /* ... */ } speak() { /* ... */ }
} }
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Use method chaining ### Use method chaining
...@@ -1152,7 +1152,7 @@ const car = new Car('Ford','F-150','red') ...@@ -1152,7 +1152,7 @@ const car = new Car('Ford','F-150','red')
.setColor('pink') .setColor('pink')
.save(); .save();
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Prefer composition over inheritance ### Prefer composition over inheritance
As stated famously in [*Design Patterns*](https://en.wikipedia.org/wiki/Design_Patterns) by the Gang of Four, As stated famously in [*Design Patterns*](https://en.wikipedia.org/wiki/Design_Patterns) by the Gang of Four,
...@@ -1218,7 +1218,7 @@ class Employee { ...@@ -1218,7 +1218,7 @@ class Employee {
// ... // ...
} }
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
## **SOLID** ## **SOLID**
### Single Responsibility Principle (SRP) ### Single Responsibility Principle (SRP)
...@@ -1276,7 +1276,7 @@ class UserSettings { ...@@ -1276,7 +1276,7 @@ class UserSettings {
} }
} }
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Open/Closed Principle (OCP) ### Open/Closed Principle (OCP)
As stated by Bertrand Meyer, "software entities (classes, modules, functions, As stated by Bertrand Meyer, "software entities (classes, modules, functions,
...@@ -1363,7 +1363,7 @@ class HttpRequester { ...@@ -1363,7 +1363,7 @@ class HttpRequester {
} }
} }
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Liskov Substitution Principle (LSP) ### Liskov Substitution Principle (LSP)
This is a scary term for a very simple concept. It's formally defined as "If S This is a scary term for a very simple concept. It's formally defined as "If S
...@@ -1478,7 +1478,7 @@ function renderLargeShapes(shapes) { ...@@ -1478,7 +1478,7 @@ function renderLargeShapes(shapes) {
const shapes = [new Rectangle(4, 5), new Rectangle(4, 5), new Square(5)]; const shapes = [new Rectangle(4, 5), new Rectangle(4, 5), new Square(5)];
renderLargeShapes(shapes); renderLargeShapes(shapes);
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Interface Segregation Principle (ISP) ### Interface Segregation Principle (ISP)
JavaScript doesn't have interfaces so this principle doesn't apply as strictly JavaScript doesn't have interfaces so this principle doesn't apply as strictly
...@@ -1553,7 +1553,7 @@ const $ = new DOMTraverser({ ...@@ -1553,7 +1553,7 @@ const $ = new DOMTraverser({
} }
}); });
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Dependency Inversion Principle (DIP) ### Dependency Inversion Principle (DIP)
This principle states two essential things: This principle states two essential things:
...@@ -1648,7 +1648,7 @@ class InventoryRequesterV2 { ...@@ -1648,7 +1648,7 @@ class InventoryRequesterV2 {
const inventoryTracker = new InventoryTracker(['apples', 'bananas'], new InventoryRequesterV2()); const inventoryTracker = new InventoryTracker(['apples', 'bananas'], new InventoryRequesterV2());
inventoryTracker.requestItems(); inventoryTracker.requestItems();
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
## **Testing** ## **Testing**
Testing is more important than shipping. If you have no tests or an Testing is more important than shipping. If you have no tests or an
...@@ -1715,7 +1715,7 @@ describe('MakeMomentJSGreatAgain', () => { ...@@ -1715,7 +1715,7 @@ describe('MakeMomentJSGreatAgain', () => {
}); });
}); });
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
## **Concurrency** ## **Concurrency**
### Use Promises, not callbacks ### Use Promises, not callbacks
...@@ -1760,7 +1760,7 @@ get('https://en.wikipedia.org/wiki/Robert_Cecil_Martin') ...@@ -1760,7 +1760,7 @@ get('https://en.wikipedia.org/wiki/Robert_Cecil_Martin')
}); });
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Async/Await are even cleaner than Promises ### Async/Await are even cleaner than Promises
Promises are a very clean alternative to callbacks, but ES2017/ES8 brings async and await Promises are a very clean alternative to callbacks, but ES2017/ES8 brings async and await
...@@ -1802,7 +1802,7 @@ async function getCleanCodeArticle() { ...@@ -1802,7 +1802,7 @@ async function getCleanCodeArticle() {
} }
} }
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
## **Error Handling** ## **Error Handling**
...@@ -1875,7 +1875,7 @@ getdata() ...@@ -1875,7 +1875,7 @@ getdata()
}); });
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
## **Formatting** ## **Formatting**
...@@ -1922,7 +1922,7 @@ function restoreDatabase() {} ...@@ -1922,7 +1922,7 @@ function restoreDatabase() {}
class Animal {} class Animal {}
class Alpaca {} class Alpaca {}
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Function callers and callees should be close ### Function callers and callees should be close
...@@ -2008,7 +2008,7 @@ const review = new PerformanceReview(employee); ...@@ -2008,7 +2008,7 @@ const review = new PerformanceReview(employee);
review.perfReview(); review.perfReview();
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
## **Comments** ## **Comments**
### Only comment things that have business logic complexity. ### Only comment things that have business logic complexity.
...@@ -2052,7 +2052,7 @@ function hashIt(data) { ...@@ -2052,7 +2052,7 @@ function hashIt(data) {
} }
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Don't leave commented out code in your codebase ### Don't leave commented out code in your codebase
Version control exists for a reason. Leave old code in your history. Version control exists for a reason. Leave old code in your history.
...@@ -2069,7 +2069,7 @@ doStuff(); ...@@ -2069,7 +2069,7 @@ doStuff();
```javascript ```javascript
doStuff(); doStuff();
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Don't have journal comments ### Don't have journal comments
Remember, use version control! There's no need for dead code, commented code, Remember, use version control! There's no need for dead code, commented code,
...@@ -2094,7 +2094,7 @@ function combine(a, b) { ...@@ -2094,7 +2094,7 @@ function combine(a, b) {
return a + b; return a + b;
} }
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
### Avoid positional markers ### Avoid positional markers
They usually just add noise. Let the functions and variable names along with the They usually just add noise. Let the functions and variable names along with the
...@@ -2129,7 +2129,7 @@ const actions = function() { ...@@ -2129,7 +2129,7 @@ const actions = function() {
// ... // ...
}; };
``` ```
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
## Translation ## Translation
...@@ -2153,4 +2153,4 @@ This is also available in other languages: ...@@ -2153,4 +2153,4 @@ This is also available in other languages:
- ![it](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Italy.png) **Italian**: - ![it](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Italy.png) **Italian**:
[frappacchio/clean-code-javascript/](https://github.com/frappacchio/clean-code-javascript/) [frappacchio/clean-code-javascript/](https://github.com/frappacchio/clean-code-javascript/)
**[⬆ en başa dön](#icindekiler)** **[⬆ en başa dön](#içindekiler)**
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment