Blog (29)
Komentarze (476)
Recenzje (0)
@iluzionWcięcia w kodzie i konfiguracja edytorów

Wcięcia w kodzie i konfiguracja edytorów

27.02.2011 17:55, aktualizacja: 04.03.2011 13:12

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).

379930

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.

379935

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:

379939

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

Wybrane dla Ciebie
Komentarze (15)