Comics: Refactoring

Opublikowano: 02.03.2024 - tagi: Komiks Rysowanie Kod Refaktoryzacja

Refactoring

Podsumowanie: Luty 2024

Opublikowano: 29.02.2024 - tagi: Blog Podsumowanie Luty 2024

W lutym opublikowałem 2 wpisy:


Inne:

  1. Czym jest złożoność cyklomatyczna?

JavaScript:

  1. Jak sprawdzić, czy tablica zawiera duplikaty?

Przeczytałem 2 książki:

  1. Wstrzykiwanie zależności — Steven Van Deursen, Mark Seemann
  2. Malarz świata ułudy — Kazuo Ishiguro

Przesłuchałem 5 audiobooków:

  1. Królowa — Elżbieta Cherezińska
  2. Tryumf Lisa Reinicke — Andrzej Pilipiuk
  3. Pan Lodowego Ogrodu. Tom 1 — Jarosław Grzędowicz
  4. Czwarte skrzydło — Rebecca Yarros
  5. Ciemność — Jozef Karika

JavaScript: Jak sprawdzić czy tablica zawiera duplikaty?

Opublikowano: 22.02.2024 - tagi: JavaScript Tablica Duplikat

Czy tablica zawiera duplikaty?

const hasDuplicates = (data) => {
	const result = new Set(data).size !== data.length;
	return result;
}

console.log(hasDuplicates([1, 2, 3]); // false
console.log(hasDuplicates([1, 2, 3, 1]); // true
console.log(hasDuplicates(['a', 'b', 'c']); // false
console.log(hasDuplicates(['a', 'b', 'b']); // true

Cała sztuczka leży w użyciu Set. Po przekazaniu danych do Set pozbywasz się ewentualnych duplikatów. Dzięki temu zmieni się rozmiar zbioru i można to porównać z liczbą elementów z oryginalnej tablicy: data.


Czym jest złożoność cyklomatyczna?

Opublikowano: 08.02.2024 - tagi: Kod Jakość Metryka Refaktoring

Czytelny kod

Kod częściej się czyta, niż pisze. Więc logiczne jest to, że warto skupić się na pisaniu kodu, który jest łatwo zrozumiały dla programisty.

Na czytelność kodu składa się kilka czynników, jak na przykład: odpowiednie nazewnictwo, liczba linijek kodu itp.

Innym ważnym czynnikiem jest złożoność kodu. Im bardziej kod jest złożony, tym trudniej się go czyta.

Jedną z metryk, która pozwala na zmierzenie złożoności kodu, jest: złożoność cyklomatyczna.

Złożoność cyklomatyczna

Informuje ona o liczbie ścieżek prowadzących w kodzie. Mierzy się ja w funkcji/metodzie.

Dzięki tej informacji wiesz nie tylko, jak bardzo złożona jest funkcja/metoda, ale także o minimalnej ilości testów potrzebnych do napisania, aby w pełni pokryć kod testami.

Minimalna wartość złożoności cyklomatycznej wynosi: 1.

Ile to za dużo?

Do jakiej wartości złożoności cyklomatycznej powinniśmy dążyć? Nie ma na to jasnej odpowiedzi, ale im mniejsza wartość, tym lepiej.

Autor książki: Zrównoważony kod. Dobre praktyki i heurystyki dla inżynierów oprogramowaniaMark Seemann proponuje, żeby maksymalna wartość wynosiła 7. Dlaczego akurat 7? Argumentuje to tym, że mózg człowieka dysponuje pamięcią krótko terminową. Jest ona ograniczona. Kiedy programista natrafia w metodzie na wiele instrukcji warunkowych lub/i pętli stara się "ogarnąć", jak działa ten kod. Im bardziej jest on złożony, tym trudniej go zrozumieć. Dlatego warto ograniczyć złożoność cyklomatyczną do stałej wartości i się tego konsekwentnie trzymać.

Jeśli złożoność cyklomatyczna wynosi więcej niż ustalona wartość powinieneś zrefaktorować kod, w wyniku czego ta wartość się zmniejszy.

Jak to policzyć?

Złożoność cyklomatyczną liczy się w prosty sposób: zaczynasz od wartości 1, licznik zwiększasz za każdym, gdy napotkasz w kodzie: instrukcje warunkowe i pętle.

Sam proces liczenia złożoności cyklomatycznej warto zautomatyzować, instalując na przykład jakąś bibliotekę do statycznej analizy kodu.

Przykłady

Przykład 1

function doSomething() {
	console.log('Hello World!');
}

Złożoność cyklomatyczna wynosi: 1.

Przykład 2

function checkSomething(a) {
	if (a > 5) {
		return true;
	}
	return false;
}

Złożoność cyklomatyczna wynosi: 2.

Przykład 3

function iterate(max) {
	let counter = 1;
	while (counter <= max) {
		console.log(`counter: ${counter}`);
		counter++;
	}
}

Złożoność cyklomatyczna wynosi: 2.

Przykład 4

function getColorInHex(color) {
	switch(color) {
		case 'red':
		return '#ff0000';
		
		case 'green':
		return '#00ff00';
		
		case 'blue':
		return '#0000ff';
		
		default:
		return 'not found';
	}
}

Złożoność cyklomatyczna wynosi: 5.

W przypadku instrukcji switch liczymy wszystkie case i default co daje nam: 1 + 4 = 5.

Przykład 5

function sayHello(name) {
	let userName = name ?? 'stranger';
	console.log(`Hello ${userName}!`);
}

Złożoność cyklomatyczna wynosi: 2.


Podsumowanie: Styczeń 2024

Opublikowano: 31.01.2024 - tagi: Blog Podsumowanie Styczeń 2024

W styczniu opublikowałem 9 wpisów:


SwiftUI:

  1. Do czego służy @Binding?
  2. Do czego służy @StateObject?
  3. Do czego służy @ObservedObject?
  4. Do czego służy @Environment?
  5. Jak sprawdzić stan aplikacji?
  6. Do czego służy @EnvironmentObject?
  7. VStack, HStack, ZStack

iOS:

  1. iOS: Wszystkie stany aplikacji

MySQL:

  1. Jak zaimportować bazę danych z pliku?

Przeczytałem 1 książkę:

  1. Zrównoważony kod. Dobre praktyki i heurystyki dla inżynierów oprogramowania — Mark Seemann

Przesłuchałem 4 audiobooki:

  1. Drach — Szczepan Twardoch
  2. Demon Copperhead — Barbara Kingsolver
  3. Chwile wieczności — Kjersti Anfinnsen
  4. Wiatr — Jozef Karika