24.07.20203 min

David TippettSoftware Engineer

4 rzeczy, które pomogą pisać czytelny kod

Poznaj 4 rzeczy, które sprawią, że Twój kod się ustabilizuje i będzie o wiele bardziej czytelny.

4 rzeczy, które pomogą pisać czytelny kod

Pisanie złego kodu jest nieuniknione. Każdemu się to zdarza w jakimś momencie życia i nie jest to nawet często ich wina. Studia nie nauczą Cię niestety tego, czego potrzeba do napisania czystego i zwięzłego kodu. Jest jednak parę wskazówek, których przestrzeganie sprawi, że będzie to przychodzić bardziej naturalnie. 


Pułapka zastawiona przez If

Przestań domyślnie używać instrukcji else. Poświęcenie czasu na przemyślenie tego, co próbujesz zrobić, może zaoszczędzić czas na późniejszym debugowaniu skomplikowanej logiki. Zobaczmy prosty przykład:

if (index < length):
  query.append(row + ',\n')
else:
  query.append(row)


Powyższe nie jest trudne do odczytania, ale wystarczy dodać kilka dodatkowych wierszy kodu i już się zaczyna tracić orientację. Usuńmy więc powieloną logikę i uprośćmy wywołania:

query.append(row)

if(index != length):
query.append(',\n')


Prosty refaktor sprawił, że widzimy zawsze dodawany wiersz. Jeśli robisz to samo w przypadku if oraz else, wyłącz to na zewnątrz.


Używaj wbudowanych funkcji

Prześladowało mnie to od dawna. Nie poświęcałem zbyt wiele czasu na znalezienie funkcji wbudowanych w dany język. Dlatego mój kod był często niepotrzebnie spuchnięty. Poniżej mamy snippet, którego użyłem do połączenia wszystkich wierszy tablicy. Wszystkie wiersze, z wyjątkiem ostatniego, musiały być oddzielone przecinkiem.

def gen_table_sql(table_obj):
row_len = length(table_obj)
query = ""

for index, row in enumerate(table_obj['columns']):
query.append(row)

# Needed so last line doesnt have a comma
if (index < length):
query.append(',\n')

return query


Wykonałem iterację po każdym wierszu, sprawdzając po drodze, czy jestem w ostatnim wierszu tablicy. Kod nie wygląda jeszcze tak strasznie, ale odczytanie go już trochę zajmuje. Potem stwierdziłem, że mogę zrobić to samo przy użyciu metody string join. Dzięki temu te wszystkie powyższe linijki mogłem zawrzeć w jednej:

def gen_table_sql(table_obj):

# Joins all rows with a comma and a newline except for the last
query = ',\n'.join(table_obj['columns'])

return query


Przestań ukrywać logikę w funkcjach

Kierując się zasadą jednej odpowiedzialności (ang. single responsibility principle), wiemy, że chcemy, aby każda funkcja robiła tylko jedną rzecz. Z powyższego przykładu może wynikać, że tak właśnie jest. Ukrywa to jednak tajną logikę, a dokładniej fakt, że funkcja wymaga, aby table_obj miała właściwość o nazwie columns. Ponadto wymagane jest również, aby atrybut kolumny był listą.

def gen_table_sql(col_list):

# Joins all rows with a comma and a newline except for the last
query = ',\n'.join(col_list)

return query


Jest to lepszy sposób na napisanie tej funkcji. Przekazujesz wtedy po prostu najprostsze możliwe dane, takie jak gen_table_sql(table_obj [„columns”]).


Dużo opisuj

Ostatnim krokiem w pisaniu lepszego kodu jest opisowość. Poniżej zmieniłem nazwę funkcji, aby opisać to, co ona robi. Oprócz dobrego nazewnictwa dodałem też dokumentację, aby podczas developmentu mieć krótki opis w moim edytorze, jak widać to zresztą poniżej:

def join_col_list(col_list):
'''Takes in column list and joins with commas to form sql
statement'''
query = ',\n'.join(col_list)

return query



Podsumowanie

Może i są to proste wskazówki, ale pomogą w tworzeniu bardziej przejrzystego kodu. Ta tendencja do upraszczania zaprocentuje z czasem wzrostem produktywności, dzięki temu, że będzie łatwiej odczytać i zrozumieć kod, który tworzysz.


Oryginał tekstu w języku angielskim możesz przeczytać tutaj.

<p>Loading...</p>

Powiązane artykuły

Dziel się wiedzą ze 160 tysiącami naszych czytelników

Zostań autorem Readme

APATOR METRIX

Młodszy Programista Testów

junior

Znamy widełki

Kontrakt B2BUmowa o pracęInna forma zatrudnienia

Ważna do 13.03.2022

Bardzo dobrze
C
Dobrze
Python
Początkujący
C++BashGit

Mikronika

Programista Embedded

medium

Brak widełek

Kontrakt B2BUmowa o pracę

Praca zdalna 100%

Ważna do 25.02.2022

Bardzo dobrze
C
Dobrze
LinuxSVN

Mikronika

Programista C dla Embedded Linux

medium

Brak widełek

Kontrakt B2BUmowa o pracę

Praca zdalna 100%

Ważna do 25.02.2022

Bardzo dobrze
C
Dobrze
LinuxGitSVN

Asseco Business Solutions

Młodszy programista frontend

junior

Brak widełek

Umowa o pracę

Lublin

Praca zdalna 100%

Ważna do 25.02.2022

Dobrze
JavaScriptHTMLCSS
Początkujący
.NETC#MS SQL

Quantum Qguar

Programista/ka baz danych

medium

Brak widełek

Umowa o pracę

Kraków

Ważna do 24.02.2022

Dobrze
PL/SQL

Accenture Polska

Programista .NET

medium

Brak widełek

Umowa o pracę

Praca zdalna 100%

Ważna do 24.02.2022

Dobrze
C#.NET/ .NET Core (wersja 2.1+) /.NET Framework (wersja 4.6.1.+)WCF
Początkujący
Typescript/Angular/React

Accenture Polska

Programista Microsoft Dynamics CRM

medium

Brak widełek

Umowa o pracę

Praca zdalna 100%

Ważna do 24.02.2022

Dobrze
Microsoft Dynamics 365 Customer Engagement (moduły Sales/Customer Service)/Microsoft Dynamics CRM.NET C#
Początkujący
JSHTMLCSS

Accenture Polska

Programista Ruby on Rails

medium

Brak widełek

Umowa o pracę

Praca zdalna 100%

Ważna do 24.02.2022

Dobrze
Ruby on RailsAzure or AWS Git
Początkujący
DockerMySQL/PostgreSQL

Accenture Polska

Programista Front-End

medium

Brak widełek

Umowa o pracę

Praca zdalna 100%

Ważna do 24.02.2022

Dobrze
JavaScriptAngular/React/React Native
Początkujący
Node.js

DOZ S.A.

Programista Java

medium

Znamy widełki

Kontrakt B2B

Ważna do 24.02.2022

Bardzo dobrze
Java GIT, CI lub CD SQL, MySQL i lub lub Oracle