Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Wcięcia w kodzie i konfiguracja edytorów

Wcięcia w kodzie źródłowym programów to temat często powracający m.in. w dyskusjach na temat konfiguracji edytorów, środowisk programistycznych (szczególnie gdy edytor ma służyć do obsługi plików napisanych w różnych językach programowania). Temat ten ma jeszcze większe znaczenie w przypadku języków, w których wcięcia wskazują strukturę programu, jak np. Python czy Haskell. Przestrzeganie właściwego stylu wcięć ma na celu nie tylko poprawienie czytelności kodu i zminimalizowanie "dekoracji" na rzecz właściwej treści, ale pociąga za sobą poważniejsze konsekwencje (xkcd ) w postaci błędów podawanych przez interpreter.

O ile w przypadku Pythona sprawa jest dość prosta, to w zrozumienie koncepcji wcięć Haskella wymaga bardziej szczegółowej analizy.

Struktura kodu Pythona podzielona jest na bloki, wydzielone za pomocą wcięć. Dla programistów przyzwyczajonych do języków programowania, w których spacja nie ma znaczenia składniowego może to być na początku irytujące. Spotyka się nawet niepochlebne porównanie do sztywnego systemu kolumnowego stosowanego w czasach fortranowych kart perforowanych (1).

r   e   k   l   a   m   a

Dodatkowe zasady związane są z formatowaniem dokumentujących ciągów tekstowych (znajdujących się za wierszem def, ale jeszcze przed właściwym kodem funkcji). Dotyczą one języka znaczników reStructuredText. Stosowanie konwencji wcięć i struktury kodu Pythona z zastosowaniem składni reStructuredText umożliwa tworzenie świetnej dokumentacji przy pomocy generatora Sphinx.

Mark Summerfield - autor książki o programowaniu w Pythonie 3 pisze tak:

W przeciwnieństwie do większości innych języków programowania, do wskazania struktury bloku Python stosuje wcięcia. Niektórzy programiści nie lubią takiego rozwiązania, zwłaszcza jeśli wcześniej nie próbowali go stosować, i podchodzą do sprawy dość emocjonalnie. Jednak przywyknięcie do tego rozwiązania zabiera kilka dni, a po upływie kilku tygodni badź miesięcy kod pozbawiony nawiasów klamrowych wydaje się przyjemniejszy i łatwiejszy w odczycie niż kod stosujący takie nawiasy.

Patrz: Java.

W przypadku Pythona obowiązuje konwencja wcięć na szerokość 4 spacji. Edytory wspierające ten język dodatkowo ułatwiają pracę dbając o właściwe umiejscowienie kursora w nowej linii.

Google Python Style Guide zaleca:

- nigdy nie używać wcięć w postaci tabulatorów
- nie mieszać znaków tabulacji ze spacjami (TabsSpacesBoth )
- w przypadku ewentualnej kontynuacji w nowej linii zaleca wyrównanie elementów w poziomie lub wcięcie na 4 spacje w sytuacji, gdy elementy umieszamy w nowej linii:

A co na ten temat mówi sam twórca języka Python Guido van Rossum?

If it uses two-space indents, it's corporate code; if it uses four-space indents, it's open source. (If it uses tabs, I didn't write it! :-)

(2)

Bardziej skompilowana sytuacja występuje w przypadku funkcyjnego języka Haskell. Tu również wcięcia odgrywają dużą rolę, a czytelność kodu wynika z przyjętego stylu Literate Programing, który opisał twórca systemu TeX - Donald Knuth. Styl ten oparty jest na założeniu, że programy komputerowe powinny być pisane z naciskiem na czytelność kodu źródłowego dla ludzi, podobnie do dzieła literackiego (3).

Choć zasady stosowania wcięć, spacji i znaków tabulacji zostały precyzyjnie opisane w Good Haskell Style, są trudniejsze do zrealizowania, a ze względu na małą popularność tego języka, dostępność narzędzi jest ograniczona.

W ten sposób zebrane zostały (chyba) wszystkie zasady teoretyczne. A jak to wygląda w praktyce?

W praktyce wiele zależy od ustawień edytora. Środowisko programistyczne IDLE dostarczane do Pythona w wersji dla systemu Windows ma domyślnie ustawione wcięcie na 4 spacje i "rozbija" znaki tabulacji na spacje, dzięki temu kod otwarty w innym edytorze wygląda zawsze tak samo niezależnie od tego czy użytkownik ma w zdefiniowany odstęp tabulacji na szerokość 2, 4 czy 8 spacji.

W jaki sposób skonfigurować edytor, który nie przestrzega domyślnie wymienionych powyżej zasad dla języka Python?

Prześledźmy pliki konfiguracyjne trzech popularnych edytorów.

Emacs

Podstawowy plik konfiguracyjny init.el powinien zawierać następujące wpisy:

(setq-default indent-tabs-mode nil)
(setq default-tab-width 4)

indent-tabs-mode przyjmuje wartość false (nil), szerokość tabulacji default-tab-width wynosi 4 spacje.

(g)Vim

Plik _vimrc znajdujący się zwykle w C:\Program Files\Vim powinien zawierać wpis

autocmd FileType python setlocal expandtab shiftwidth=4 softtabstop=4 autoindent smartindent smarttab nu

w którym expandtab odpowiada za "rozbicie" znaków tabulacji na spacje.

SciTE

W pliku SciTEGlobal.properties należy przypisać zmiennym następujące wartości:

# Indentation
tabsize=4
indent.size=4
use.tabs=0

Na koniec lektura obowiązkowa:

- PEP 8 -- Style Guide for Python Code
- PEP 257 -- Docstring Conventions

(1 ) Python - Struktura przez wcięcia
(2 ) All Things Pythonic
(3 ) Literate programming
 

Komentarze