Składanie kodu - Code folding

Przykład składania kodu w kodzie PHP z Vim

Kodeks składane lub mniej powszechnie holophrasting jest cechą niektórych edytorach tekstu , edytor kodu źródłowego i IDE , które pozwala użytkownikowi do selektywnego ukrywania i wyświetlania - „spasować” - odcinków aktualnie edytowanego pliku jako część rutynowych operacji edycyjnych. Pozwala to użytkownikowi zarządzać dużymi ilościami tekstu, jednocześnie wyświetlając tylko te podsekcje tekstu, które są szczególnie istotne w danym momencie.

Identyfikacja fałd może odbywać się automatycznie, najczęściej na podstawie składni danego języka komputerowego , wcięcia, lub ręcznie, na podstawie znacznika in-band (zapisanego jako część kodu źródłowego) lub określonego poza pasmem, tylko w edytorze.

Wiele edytorów udostępnia widżety umożliwiające zwijanie kodu na pasku bocznym, obok numerów wierszy, oznaczonych na przykład trójkątem skierowanym w bok (jeśli zwinięty) lub w dół (jeśli jest rozwinięty) lub przez [-]pole zwijanego (rozwiniętego) tekstu oraz [+]pole na tekst rozwijalny (zwinięty). Ta funkcja jest powszechnie używana przez niektórych programistów komputerowych do zarządzania plikami kodu źródłowego , a także jest często używana do porównywania danych , aby wyświetlić tylko zmieniony tekst.

Składanie tekstu to podobna funkcja używana w edytorach składania , konturach i niektórych edytorach tekstu , ale jest używana do zwykłego tekstu i, jeśli jest automatyczna, opiera się na składni języków ludzkich, zwłaszcza akapitów lub poziomach sekcji, a nie na składni komputera język. Innym wariantem składania kodu jest „zwijanie danych”, które jest zaimplementowane w niektórych edytorach heksadecymalnych i służy do strukturyzowania pliku binarnego lub ukrywania niedostępnych sekcji danych w edytorze pamięci RAM. Istnieją różne alternatywne terminy dla takich funkcji, w tym „rozwiń i zwiń”, „ukrywanie kodu” i „konturowanie”. W programie Microsoft Word funkcja ta nosi nazwę „składany kontur”.

Historia

Najwcześniejszym znanym przykładem składania kodu w edytorze jest NLS (system komputerowy) . Prawdopodobnie pierwszym powszechnie dostępnym edytorem składania był edytor Structured Programming Facility (SPF) z 1974 roku dla komputerów mainframe IBM 370 , który potrafił ukrywać linie na podstawie ich wcięć. Jest wyświetlany na terminalach 3270 z mapami znakowymi. To było bardzo przydatne dla języków prolix, takich jak COBOL . Przekształcił się w Interactive System Productivity Facility ( ISPF ).

Posługiwać się

Składanie kodu ma różne wzorce użytkowania , przede wszystkim porządkowanie kodu lub ukrywanie mniej przydatnych informacji, dzięki czemu można skupić się na ważniejszych informacjach. Następują wspólne wzorce.

Zarys

Najprościej mówiąc, aplikacje wykorzystują zwijanie kodu do zarysowania kodu źródłowego, zwijając każdy blok do pojedynczej linii. Mogą to być tylko bloki najwyższego poziomu, takie jak funkcje i klasy, bloki zagnieżdżone, takie jak zagnieżdżone funkcje i metody, lub wszystkie bloki, w szczególności bloki przepływu sterowania. Dzięki temu można uzyskać przegląd kodu, łatwo go nawigować i zmieniać jego kolejność oraz w razie potrzeby zagłębić się w szczegóły, bez rozpraszania się innym kodem. Pod względem widoku pozwala to szybko zobaczyć listę wszystkich funkcji (bez ich ciał), podczas gdy pod względem nawigacji zastępuje obszerne stronicowanie po długich funkcjach – lub wyszukiwanie celu – z przechodzeniem bezpośrednio do następnej funkcji.

Ukrywanie kodu standardowego

Niektóre języki lub biblioteki wymagają obszernego kodu wzorcowego . Skutkuje to bardzo długim kodem, który może przesłonić główny punkt. Co więcej, kod merytoryczny może zostać utracony w schemacie.

Na przykład w Javie pojedyncze pole prywatne z getterem i setterem wymaga co najmniej 3 wierszy, jeśli każdy znajduje się w osobnym wierszu:

private String name = null;
public String getName() { return name; }
public void setName(String name) { this.name = name; }

Rozszerza się do 10 wierszy z konwencjonalnymi podziałami wierszy funkcji i odstępami między funkcjami (w tym końcowym znakiem nowej linii):

private String name = null;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

Dokumentacja z Javadoc rozszerza to do 20 wierszy:

/**
 * Property <code>name</code>  readable/writable.
 */
private String name = null;

/**
 * Getter for property <code>name</code>
 */
public String getName() {
    return name;
}

/**
 * Setter for property <code>name</code>.
 * @param name
 */
public void setName(String name) {
    this.name = name;
}

Jeśli jest wiele takich pól, wynikiem mogą być setki linii kodu z bardzo małą „interesującą” zawartością – zwijanie kodu może zredukować to do jednej linii na pole, a nawet do jednej linii dla wszystkich pól. Ponadto, jeśli wszystkie pola rutynowe są składane, ale pola nierutynowe (gdzie pobierający lub ustawiający nie tylko zwracają lub przypisują pole prywatne) nie są składane, łatwiej jest zobaczyć kod merytoryczny.

Zwijanie metadanych

Metadane mogą być długie i generalnie są mniej ważne niż dane, które opisują. Zwijanie metadanych pozwala skupić się przede wszystkim na danych, a nie na metadanych. Na przykład długa lista atrybutów w C# może być ręcznie zwinięta w następujący sposób:

#region Attributes
[Browsable(false)]
[MergableProperty(false)]
[DefaultValue(null)]
[PersistenceMode(PersistenceMode.InnerProperty)]
[TemplateContainer(typeof(MyType))]
[TemplateInstance(TemplateInstance.Single)] 
#endregion
public ITemplate ContentTemplate
{
    get { return _temp; }
    set { _temp = value; }
}

Otrzymany kod wyświetla się jako:

Attributes
public ITemplate ContentTemplate
{
    get { return _temp; }
    set { _temp = value; }
}

Zwijające się komentarze

Komentarze są formą metadanych czytelnych dla człowieka, a długie komentarze mogą zakłócać przepływ kodu. Może tak być w przypadku długiego komentarza do krótkiego fragmentu kodu, takiego jak akapit wyjaśniający jeden wiersz, lub komentarzy do generatorów dokumentacji , takich jak Javadoc lub Dokumentacja XML . Zwijanie kodu pozwala na posiadanie długich komentarzy, ale wyświetlanie ich tylko wtedy, gdy jest to wymagane. W przypadkach, w których długi komentarz ma pojedynczy wiersz podsumowania, na przykład w dokumentach Pythona, podsumowanie może być nadal wyświetlane, gdy sekcja jest zwinięta, umożliwiając widok podsumowania/szczegółowy.

Pokazywanie struktury lub kodu kanapkowego w programowaniu strukturalnym

Programowanie strukturalne składa się z zagnieżdżonych bloków kodu, a długie bloki kodu — takie jak długie instrukcje switch — mogą zaciemniać ogólną strukturę. Zwijanie kodu pozwala zobaczyć ogólną strukturę i rozwinąć do określonego poziomu. Co więcej, w niektórych zastosowaniach, szczególnie w ścisłym programowaniu strukturalnym (wyjście z pojedynczej funkcji), istnieją wzorce kodu, które są trudne do zauważenia, patrząc na kod rozszerzony. Na przykład, w zarządzaniu zasobami w programowaniu strukturalnym, zazwyczaj nabywa się zasób, po którym następuje blok kodu wykorzystujący zasób i kończący się zwolnieniem zasobu. Parowanie pozyskiwania/zwalniania jest trudne do zauważenia, jeśli pomiędzy nimi jest długi blok kodu, ale łatwo jest sprawdzić, czy blok pośredniczący jest złożony. Podobnie w kodzie warunkowym, takim jak if...then...else, bloki pomocnicze mogą być dalekie od instrukcji warunku.

Kod grupujący

Grupy zawinięć mogą być używane do grupowania kodu poprzez grupowanie jawne — podobne do bloków komentarzy dzielących moduł na sekcje lub członków klasy w powiązane grupy — lub niejawnie, na przykład poprzez automatyczne grupowanie członków klasy według poziomu dostępu.

Ukrywanie starszego kodu

Starszy kod — lub dowolny kod, którego programista nie chce przeglądać ani zmieniać w danym momencie — można złożyć, aby programiści mogli skoncentrować się na rozważanym kodzie.

Ukrywanie tabel danych źródłowych

Konwencje

Aby obsługiwać zginanie kodu, edytor tekstu musi zapewnić mechanizm identyfikacji „punktów zwijania” w pliku tekstowym. Niektóre edytory tekstu zapewniają ten mechanizm automatycznie, podczas gdy inne zapewniają wartości domyślne, które użytkownik może zastąpić lub rozszerzyć.

Istnieją różne mechanizmy, zgrubnie podzielone na automatyczne i ręczne – czy wymagają one specyfikacji przez programistę? Punkty składania są zwykle określane za pomocą co najmniej jednego z poniższych mechanizmów. Każdy z nich ma swoje własne zalety i trudności, a decyzja, który zaimplementować, należy zasadniczo do programistów, którzy tworzą oprogramowanie do edycji tekstu. Edytory tekstu, które zapewniają obsługę wielu mechanizmów składania, zwykle pozwalają użytkownikowi wybrać, który jest najbardziej odpowiedni dla edytowanego pliku.

Zależne od składni

Punkty składania zależne od składni to te, które opierają się na zawartości edytowanego pliku w celu określenia miejsca, w którym określone regiony składania powinny się zaczynać i kończyć. Punkty składania oparte na składni są zwykle definiowane wokół dowolnej lub wszystkich standardowych funkcji podrzędnych używanego języka znaczników lub języka programowania . Są one pożądane ze względu na automatyzację i zgodność ze strukturą kodu, ale ich implementacja może wymagać znacznego nakładu pracy i czasu na obliczenia podczas edycji pliku.

Oparte na wcięciach

Punkty składania oparte na wcięciach są zazwyczaj określane przez położenie i kolejność niedrukowalnych białych znaków, takich jak tabulatory i spacje w tekście. Jest to najczęściej używane jako prosta forma składania opartego na składni, ponieważ wcięcia prawie zawsze odzwierciedlają poziom zagnieżdżenia w stylach wcięć dla strukturalnych języków programowania.

Ta konwencja jest szczególnie odpowiednia dla składni, które mają regułę off-side , więc struktura w dużej mierze jest zgodna z wcięciem. Przykładami są pliki Python i pliki tekstowe, które z reguły same wymagają wcięć. Jednak nawet w tych przypadkach struktura nie jest dokładnie zgodna z wcięciem, na przykład w linii Continue , dlatego preferowane jest składanie zależne od składni.

Oparte na tokenach

Punkty składania oparte na tokenach są określane za pomocą specjalnych ograniczników, które w tekście służą wyłącznie do identyfikacji granic punktów składania. Konwencję tę można porównać do punktów składania opartych na wcięciach, w których zamiast białych znaków używane są znaki drukowalne. Najczęstsze żetony ograniczników to {{{początek części złożonej i }}}jej zakończenie.

Innym godnym uwagi tokenem są #region( dyrektywy C# ) odpowiednio #Region( dyrektywy Visual Basic ) używane w Microsoft Visual Studio Code Editor . Są one traktowane składniowo jako dyrektywy kompilatora , chociaż nie wpływają na kompilację.

Jako metoda ręczna, składanie oparte na tokenach pozwala na dowolność w grupowaniu kodu na podstawie dowolnych kryteriów, takich jak „funkcje związane z danym zadaniem”, których nie można wywnioskować z analizy składniowej.

Składanie oparte na tokenach wymaga sygnalizacji wewnątrzpasmowej, przy czym składane tokeny są zasadniczo ustrukturyzowanymi komentarzami i w przeciwieństwie do innych metod są obecne w kodzie źródłowym i widoczne dla innych programistów. Pozwala to na ich współdzielenie, ale także wymaga ich użycia (lub zachowania) przez wszystkich programistów pracujących na danym pliku i może powodować tarcia i obciążenia związane z utrzymaniem.

Określony przez użytkownika

Zwijanie określone przez użytkownika pozwala użytkownikowi składać sekcje tekstu przy użyciu ogólnej metody zaznaczania, ale bez zmiany kodu źródłowego (poza pasmem), zamiast tego określane jest tylko w edytorze. Na przykład programista może zaznaczyć kilka wierszy tekstu i określić, że powinny one być zagięte. Tekst zwinięty może być anonimowy lub nazwany, co może zostać zachowane podczas sesji edycji lub odrzucone. W przeciwieństwie do składania za pomocą tokena nie zmienia to tekstu źródłowego – dlatego nie jest udostępniany innym edytorom pliku i nie jest widoczny w kodzie.

Przykłady

Poniższy dokument zawiera składane żetony ( {{{ ... }}}):

 Heading 1
 {{{
 Body
 }}}

 Heading 2
 {{{
 Body
 }}}

 Heading 3
 {{{
 Body
 }}}

Po załadowaniu do edytora składania zostanie pokazana struktura konspektu:

 Heading 1
 {{{ ...

 Heading 2
 {{{ ...

 Heading 3
 {{{ ...

Zwykle kliknięcie na {{{znaki powoduje wyświetlenie odpowiedniego tekstu podstawowego.

Oprogramowanie z możliwością składania kodu

Jednym z pierwszych edytorów składania był STET , edytor napisany dla systemu operacyjnego VM/CMS w 1977 roku przez Mike'a Cowlishawa . STET to edytor tekstu (do dokumentacji, programów itp.), który składa pliki na podstawie bloków wierszy; dowolny blok linii może zostać złożony i zastąpiony linią nazwy (która z kolei może być częścią bloku, który sam może być następnie złożony).

Edytor składania pojawił się w okcam IDE około 1983 roku, nazwany Inmos Transputer Development System (TDS) , . Edytor „f” (na liście poniżej) jest prawdopodobnie najbardziej nienaruszoną spuścizną po tej pracy.

Macintosh komputer historycznie szereg wydawców kodu źródłowego , że „złożone” części kodu poprzez „ ujawnienia trójkąty”. Produkt UserLand Software Frontier to środowisko skryptowe, które ma tę możliwość.

Zwijanie jest zapewniane przez wiele nowoczesnych edytorów tekstu, a składanie oparte na składni lub semantyce jest obecnie składnikiem wielu środowisk programistycznych . Redakcja obejmuje:

Nazwa Znak Wcięcie Składnia Użytkownik
Edytor ABAP tak ? tak ?
AkelPad ? ? tak ?
Anjuta IDE ? tak tak ?
Atom ? tak ? tak
BBEdit ? ? tak ?
Wsporniki Podłącz tak tak Nie
Kod w dowolnym miejscu tak tak tak ?
Codenvy tak tak tak ?
Kod::Bloki IDE tak tak tak tak
CudaText ? ? ? ?
IDE Delphi tak ? tak ?
tkacz snów ? ? ? tak
Zaćmienie ? ? tak ?
EditPlus Nie tak Nie Nie
Emacs tak ? tak tak
EmEditor Professional ? tak tak ?
IDE FlashDevelop ? ? tak ?
geania ? tak tak ?
gedit tak tak tak ?
ISPF ? tak ? tak
JED tak tak ? Nie
jEdytuj tak tak tak tak
Kate tak tak tak tak
MATLAB Nie Nie tak Nie
MS Visual Studio tak tak tak tak
NetBeans IDE tak tak tak tak
Notatnik++ ? tak tak tak
NuSphere PHPEd ? ? tak tak
Kreator Qt ? ? tak ?
SciTE tak tak tak ?
STET ? ? ? ?
TekstMate tak tak tak tak
UltraEdit Nie Nie tak tak
Krzepkość tak tak tak tak
Ekspert wizualny ? ? tak ?
Kod programu Visual Studio tak tak tak Nie
Xkod tak tak tak tak
Studio Zend ? ? ? ?


Inni redaktorzy

Zobacz też

Uwagi

Bibliografia

Zewnętrzne linki