Ile metoda powinna mieć parametrów ?

Ile metoda powinna mieć parametrów ?
0

Dzień dobry,
mam takie pytanie. Ile metoda powinna posiadać maksymalnie parametrów aby wyglądała przyzwoicie ? Muszę wygenerować pewien obraz i teraz metoda posiada ich aż 6 (width, height, accurancy, start, end, sourceImage). Każdy z nich jest ważny. Czy rozbijać to na metody z mniejszą liczbą parametrów czy może tak być ?

Pozdrawiam

0

Zrób kilka wersji skoro nie jesteś pewien, po to w końcu wymyślono przeciążanie funkcji :)

A tak poza tym to możesz zrobić np. z jednym parametrem którym będzie struktura/klasa zawierająca te parametry.

pavon147
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 7 lat
1

Jeśli potrzebujesz, zrób tyle. Ważne, by miało to sens i żeby metoda nie zajmowała się kilkoma operacjami jednocześnie w myśl zasady jednej odpowiedzialności. Jeżeli pojawi się w niej kilka różnych zadań, wtedy to rozbij na pośrednie. Ilością parametrów się nie przejmuj, na pewno nie sześcioma.

grzesiek51114
grzesiek51114
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:2442
0

Metoda powinna wykonywać tylko jedną dedykowaną jej czynność oraz posiadać możliwie jak najmniej parametrów.

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

accurancy :D
Czemu nie zrobisz z tych parametrów jakiegoś DTO? Przecież te parametry są wyraźnie powiązane, więc logicznym jest zrobić ładną klasę immutable która będzie przechowywać te twoje ImageParameters czy co to tam masz.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Azarien
nic to nie da, a skomplikuje wywołanie takiej funkcji.
Shalom
@Azarien niby w jaki sposób? o_O Wręcz przeciwnie. Przekazywanie tych parametrów będzie znacznie łatwiejsze, a kod będzie czytelny bo widzisz od razu że gdzieśtam śmigają ci "ParametryObrazka" a nie jakieś zmienne start czy end które cholera wie czym są. Jasne że jak autor chce latać z tymi zmiennymi a dopiero na czas samego wywołania zrobic new ImagesParameters(...) to nie ma to sensu, ale ja zakładam że ktoś tu myśli...
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 22 godziny
  • Lokalizacja:Wrocław
0
Origin_ napisał(a):

Ile metoda powinna posiadać maksymalnie parametrów aby wyglądała przyzwoicie ? Muszę wygenerować pewien obraz i teraz metoda posiada ich aż 6 (width, height, accurancy, start, end, sourceImage). Każdy z nich jest ważny. Czy rozbijać to na metody z mniejszą liczbą parametrów czy może tak być ?

Jeśli możesz rozbić metodę, bo robi wiele rzeczy na raz, to ją rozbij - niezależnie od tego, ile parametrów przyjmuje. A parametry pogrupuj sensownie i opakuj w jakieś klasy.

pavon147 napisał(a):

Jeśli potrzebujesz, zrób tyle. Ważne, by miało to sens i żeby metoda nie zajmowała się kilkoma operacjami jednocześnie w myśl zasady jednej odpowiedzialności. Jeżeli pojawi się w niej kilka różnych zadań, wtedy to rozbij na pośrednie. Ilością parametrów się nie przejmuj, na pewno nie sześcioma.

A jeśli potrzebuje 50, to ma zrobić 50?!

Heheczek
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 5 lat
  • Postów:148
0

Nie wrzucaj tego w tablice - a jak chcesz wiedzieć czemu to patrz na komentarze tego posta

edytowany 2x, ostatnio: Heheczek
Zobacz pozostałe 15 komentarzy
spartanPAGE
@Heheczek poza bezpieczeństwem jest jeszcze złożoność obliczeniowa dla takiego szukania po słowniku, co na dłuższą metę jest jak branie cegieł do plecaka na podróż w alpy.
krzysiek050
ludzie się mylą. Mógłbyś napisać $obraz["widtth"] i szukać błędu godzinami
Shalom
@Heheczek poprawiałem ostatnio kod po takim geniuszu co też tak myślał i ładował do tablicy asocjacyjnej zamiast do normalnych klas. I teraz trzeba detektywa i godzin (!) poświeconych na to żeby rozkminić gdzie, co i jakie parametry potrzebuje. Bo w klasie od razu widzisz że potrzebne parametry to XYZ. A w hashtable g**no widzisz i musisz sprawdzać w kodzie, który używa tej tablicy, co i pod jakim kluczem ktoś próbuje z niej wyciągać... Do tego znaleźć wszystkie miejsca które używają danej klasy to jeden klik. Powodzenia w szukaniu miejsc w kodzie które używają tej talbicy
Heheczek
Hmmm no dobra lecz w jakim miejscu w jakims dużym projekcie powinno się deklarować klasy tego typu i jak je nazywać?
Shalom
W dużym projekcie powinien być podział na moduły i pakiety a te klasy powinny być gdzieś blisko miejsca gdzie ich używasz. Nazwa oczywiście zależy od tego co dana klasa reprezentuje. Nie ma jakiegoś standardu nazewnictwa na klasy DTO ;]
datdata
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 7 lat
  • Postów:957
0

Koledzy dobrze mówią, korzystnie i utrzymanie metody, która posiada 1-2 argumentów jest wyraźnie łatwiejsze i bezpieczniejsze niż sześciu.


"A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects." Robert Heinlein.
pavon147
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 7 lat
0

@somekind

A jeśli potrzebuje 50, to ma zrobić 50?!

Przecież napisałem o sześciu parametrach:

Ilością parametrów się nie przejmuj, na pewno nie sześcioma

Nie wiadomo na jaką skalę to rozwiązanie ma zaistnieć. Może nie warto w ogóle kombinować, a do jakiejś pierdoły (if any) niech ma te 6 parametrów w funkcji.

edytowany 2x, ostatnio: pavon147
Artekat
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 7 lat
  • Lokalizacja:Elbląg
  • Postów:49
0

Na studiach mieliśmy taki wykład o nazwie "Perfekcyjna pani kodu", była w nim mowa o tym by metody(funkcje) miały jak najmniej parametrów(optymalnie 1-3) jeżeli twoja metoda ma ich więcej należy zmienić podejście. Rozbić na kilka metod czy klas. W javie można żonglować obiektami co ułatwia sprawę ;P

Na wykładzie była też mowa by nie używać komentarzy, nazwy klas, metod, zmiennych powinny być jasne :P

Heheczek
Ja takich rzeczy niestety nie miałem na swoich studiach. A myślę że to jest jedna z ważniejszych rzeczy...
Artekat
Racja, tylko trzeba też rozumieć o czym prowadzący mówi, a delikatnie mówiąc dużo u nas grafików na studiach ;> Wątpię czy 50% słuchaczy wiedziało o czym mowa ;P
Heheczek
Moje studia były bardziej skierowane na programowanie, tylko raz usłyszałem że w programie w c# napisałem "magic numbers" i to tyle co do czystego kodowania ;>
xfin
  • Rejestracja:ponad 11 lat
  • Ostatnio:8 miesięcy
  • Lokalizacja:Genewa
  • Postów:597
1

6 parametrów? Toż to samobójstwo prawie. 1-2 optimum, jak się naprawdę mocno uprze i ma porządne argumenty to maksimum 3!
Zbyt wiele argumentów wskazuje na jedną z dwóch możliwości:

  • autor nie stosuj zasady "pojedynczej odpowiedzialności",
  • argumenty są ze sobą bardzo powiązane (ale wtedy to lepiej napisać jakąś klasę),
    (oczywiście jest też trzecia możliwość - ktoś uczy się programowania, ale skoro ładnie tutaj pyta to odpowiadam jak należy).

Ale cytując R.C. Martina:

The ideal number of arguments for a function is zero.

datdata
Podaj jakiś przykład funkcji bez argumentów.
Heheczek
@datdata To nie jest dosłowny sens tego cytatu - przynajmniej ja to tak rozumiem
xfin
@Heheczek - dobrze rozumiesz. Z tego co pamiętam, Martin skupiał się na możliwości popełniania błędów i czytelności kodu. Napisał, że z każdym argumentem rośnie prawdopodobieństwo popełnienia błędu przez osobę, która kodu będzie używała. @datdata - Bodajże w 'Clean Code' jest masa przytoczonych przez niego funkcji bezargumentowych - wynikało to z wyodrębnienia odpowiednich klas i korzystania z ich pól.
GThoro
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 6 lat
  • Postów:98
0
xfin napisał(a):

Ale cytując R.C. Martina:

The ideal number of arguments for a function is zero.

I ma operować na stanach globalnych? :D

Zobacz pozostałe 9 komentarzy
xfin
@GThoro tu oczywiście się z Tobą zgodzę, tylko w tym przypadku zahaczamy o coraz szerszy zakres "dobrych praktyk". Niemniej tamten cytat był raczej informujący i podany jako ciekawostka, nie chciałem go używać jako 'plaskacza'.
datdata
"Funkcja to nazwany zbiór wyrażeń" - ehh, patologia.
krzysiek050
Patologią jest gównoburza o definicje które nie mają żadnego znaczenia (jak powiem o funkcji bezparametrowej w klasie to i tak każdy będzie wiedział o co chodzi), ale olanie słów bardzo mądrego i doświadczonego człowieka które pomogły poprawić masę kodu na całym świecie
datdata
Żadna gównoburza, jeśli ma wartości poznawcze. Nie olewam tych słów, bo sam stosuję się do praktyki, że im mniej argumentów tym lepiej, ale są też inne wartości w programowaniu: np. żeby unikać mutability i ogólnie "stanowości" w kodzie, a opaczna interpretacja tych słów może powodować. Bo co z tego, że ktoś napisze funkcje bez parametrów w nagłówku, skoro w kodzie będzie używał ich w nadmiernej ilości.
krzysiek050
Mutability i stanowość to dobry i ważny temat. Ale walka na definicje funkcji/procedr/metod które nie mają żadnego znaczenia to już gównoburza.
Realmarecz
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Poznań
  • Postów:39
0

Też się ostatnio dużo rozwijam w tym temacie ale z lektur i wiedzy nabytej i przykładów.

Obraz potraktować jako Obiekt, opisać go klasą. W której będziesz miał odpowiednie metody z mniejszą ilością argumentów max.2 no chyba że zaczniesz pisać jakieś 3 wymiarowe obiekty albo jest to bezwzglednie konieczne.

Nie wiem dokładnie na czym polega program bo było by łatwiej. Przy podchodzeniu do jakiegoś projektu po 1 powinno się pisać obiektowo, po 2 za nim zabierzesz się za programowanie obiektowe jest etap projektowania obiektowego w który właśnie warto ustalić takie rzeczy i można nawet opisać tam metody.

width, height
accurancy
start, end
sourceImage


Marecz <-> RealMarecz
edytowany 2x, ostatnio: Realmarecz
Sarrus
  • Rejestracja:prawie 14 lat
  • Ostatnio:dzień
  • Postów:2512
3
xfin napisał(a):

6 parametrów? Toż to samobójstwo prawie. 1-2 optimum, jak się naprawdę mocno uprze i ma porządne argumenty to maksimum 3!

  • autor nie stosuj zasady "pojedynczej odpowiedzialności",
  • argumenty są ze sobą bardzo powiązane (ale wtedy to lepiej napisać jakąś klasę),
    (oczywiście jest też trzecia możliwość - ktoś uczy się programowania, ale skoro ładnie tutaj pyta to odpowiadam jak należy).

A ja się tutaj nie zgodzę. Jak przeglądam kod jednego projektu to większość metod się mieści w tych granicach owszem, ale są wyjątki by design. Na przykład mam interfejs który definiuję metodę Initialize i ta metoda przyjmuje 6 parametrów właśnie. Wszystkie parametry są potrzebne, a co metoda robi to zależy od poszczególnych implementacji. Czasem robi bardzo dużo wywołując inne metody danej klasy. Można by też tutaj dyskutować o zasadzie pojedynczej odpowiedzialności. Czy są z tym problemy? Nie. Żadne. Funkcjonuje to od 3 lat co najmniej i wielokrotnie były dodawane kolejne implementacje (łącznie około 30). Wywołanie natomiast cały czas jest jedno w całym projekcie.

Podsumowując - nie ma tutaj maksimum - wszystko zależy od okoliczności. Od każdej reguły znajdzie się wyjątek o ile programista ma wystarczająco dużo doświadczenia, aby kierować się zdrowym rozsądkiem.

Zadziwia mnie jak łatwo przychodzi, nam programistom, rzucanie osądów na temat dobrych praktyk programowania - zupełnie jakby człowiek już wszystko w życiu widział. Owszem są mądre książki pisane przez mądrych doświadczonych ludzi, ale one zawierają reguły właśnie - pomijają wyjątki.

edytowany 2x, ostatnio: Sarrus
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 5 godzin
2

To zależy co to za parametry. Posłużę się przykładami w C, bo akurat dwa skrajne przychodzą mi do głowy:

Kopiuj
void gluLookAt(GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ,
               GLdouble centerX, GLdouble centerY, GLdouble centerZ,
               GLdouble upX, GLdouble upY, GLdouble upZ);

Tu jest parametrów dziewięć, ale tak jakby były trzy: eye, center, up. Więcej pamiętać nie trzeba, kolejność x,y,z jest oczywista.
Mogłyby być trzy struktury, ale nie są, a mimo to wywołanie funkcji jest dość jasne, zwłaszcza jeśli sami sobie te struktury stworzymy:

Kopiuj
gluLookAt(eye.x, eye.y, eye.z, center.x, center.y, center.z, 0, 1, 0);

```cpp HWND WINAPI CreateWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam); ``` Parametrów jedenaście. Jeśli potraktować x,y i nWidth,nHeight jako parametry podwójne to dziewięć. Różnych typów, o różnym znaczeniu, trudnej do zapamiętania kolejności.
Kopiuj
HWND wnd = CreateWindow(MAKEINTATOM(atom), L"Ala ma kota", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, NULL, NULL, hInstance, NULL);

Masakra.

Kopiuj
HWND wnd = CreateWindow(
    MAKEINTATOM(atom),
    L"Ala ma kota",
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT,
    400, 300,
    (HWND)NULL,
    (HMENU)NULL,
    (HINSTANCE)hInstance,
    (LPVOID)NULL
);

Już lepiej. Większość przykładów w necie ma dopisane nazwy parametrów w komentarzach.

Sarrus
WinAPI imo nie jest dobrym przykładem. Krótko w tym pisałem, ale mogę powiedzieć, że początki pisania w tym to istny koszmar
Azarien
pokazałem CreateWindow jako właśnie przykład negatywny użycia wielu parametrów ;-)
GThoro
Wyobraziłem sobie deklarację tych funkcji w obj-c i się przeraziłem :O
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

@Sarrus

  1. Równie dobrze mogłaby przyjmować jeden argument "InitializeParameters" i kod nagle byłby bardziej czytelny ;)

Czy są z tym problemy? Nie. Żadne. Funkcjonuje to od 3 lat co najmniej i wielokrotnie były dodawane kolejne implementacje

To że coś działa wcale nie znaczy że jest napisane sensownie i poprawnie ;) A jak się okaże że któraś kolejna implementacja wymaga dodatkowego parametru? Albo kilku dodatkowych parametrów? To dodajecie w tej bazowej a reszta ma X nulli w tym wywołaniu? ;)


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Lectre
Jaki konkretny będziemy mieli z tego benefit? Jeżeli w danej sytuacji ktoś tworzy obiekt jedynie na potrzeby wywołania funkcji i podania argumentów, to zamiast func(arg1, arg2, arg3, arg4, arg5, arg6) dostajemy func(new obj(arg1, arg2, ...)).
Shalom
No w takiej sytuacji to nie ma specjalnie sensu, ale w praktyce zwykle te parametry jednak są używane i cośtam się z nimi dzieje i wygodniej operuje się na nich wiedząc co oznaczają i skąd się biorą. Serio lepiej mieć w metodzie 3 złożone obiekty niż 30 zmiennych ;)
Sarrus
  • Rejestracja:prawie 14 lat
  • Ostatnio:dzień
  • Postów:2512
0
Shalom napisał(a):

@Sarrus

  1. Równie dobrze mogłaby przyjmować jeden argument "InitializeParameters" i kod nagle byłby bardziej czytelny ;)

Bym się może zgodził, ale i z tymi 6 też jest ok. Wywołań metody więcej nie będzie i tworzenie specjalnego obiektu w tym przypadku byłoby nadmiarowe.

  1. To że coś działa wcale nie znaczy że jest napisane sensownie i poprawnie ;) A jak się okaże że któraś kolejna implementacja wymaga dodatkowego parametru? Albo kilku dodatkowych parametrów? To dodajecie w tej bazowej a reszta ma X nulli w tym wywołaniu? ;)

Żadna z nowych implementacji nie będzie wymagała dodatkowych parametrów :P. Tutaj jestem tego w 100% pewien. :)

Nie chodzi mi o to, że się nie zgadzam z tym. Zgadzam się jak najbardziej. Chodzi mi o to, że w niektórych przypadkach pisanie wszystkiego sztywno zgodnie z wszystkimi dobrymi praktykami prowadzi do zbędnego nadmiarowego kodu. Te zasady trzeba znać i rozumieć, ale też wiedzieć kiedy można je trochę nagiąć.

edytowany 1x, ostatnio: Sarrus
H1
  • Rejestracja:około 10 lat
  • Ostatnio:ponad 6 lat
  • Postów:185
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
0

@Sarrus:

(...) Funkcjonuje to od 3 lat co najmniej i wielokrotnie były dodawane kolejne implementacje

Zupełnie jak do biblioteki standardowej PHP, zatem to mierny wyznacznik jakości ;)


somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 22 godziny
  • Lokalizacja:Wrocław
2
xfin napisał(a):

6 parametrów? Toż to samobójstwo prawie.

Bez przesady. 6 to nie 60. :)

Sarrus napisał(a):

Podsumowując - nie ma tutaj maksimum - wszystko zależy od okoliczności. Od każdej reguły znajdzie się wyjątek o ile programista ma wystarczająco dużo doświadczenia, aby kierować się zdrowym rozsądkiem.

Zgodnie z doświadczeniem i zdrowym rozsądkiem należy dążyć do tego, żeby metoda miała jeden argument wejściowy. W przyszłości łatwiej będzie dodać nowe pole w istniejącej klasie niż przerabiać 6 parametrów na klasę. To drugie wymaga znacznie więcej zmian w projekcie, a już nie daj Boże, jeśli mamy jakieś testy.

Sarrus napisał(a):

Chodzi mi o to, że w niektórych przypadkach pisanie wszystkiego sztywno zgodnie z wszystkimi dobrymi praktykami prowadzi do zbędnego nadmiarowego kodu. Te zasady trzeba znać i rozumieć, ale też wiedzieć kiedy można je trochę nagiąć.

Nie wierzę w istnienie projektów, w którym nadmiarowy kod jest powodowany przez dobre praktyki. Owszem, stosowanie wzorców i pisanie wszystkiego "ładnie" powoduje pewien narzut, ale niestosowanie wzorców, używanie kopiuj-wklej i podejście "a po co tak, przecież działa", powoduje powstawianie dużo więcej zbędnego kodu.

Zobacz pozostałe 3 komentarze
Sarrus
@somekind u mnie w obecnej firmie bardzo dużą wagę przykłada się do jakości kodu, ale tworzenie klasy tylko po to, żeby był jeden argument funkcji zamiast trzech nie przejdzie code review
Shalom
@Sarrus to chyba przykładacie wagę do jakości kodu tak jak ci tutaj: Dla tych którzy śledzili mój... :D
Sarrus
Nie, po prostu stosuje się zasadę KISS. Co do polityki jakości to chętnie bym porozmawiał, ale obowiązuje mnie tajemnica służbowa. Mogę powiedzieć, że mamy continuous integration, korzystamy z gita i mamy masę testów. Z Twojej wypowiedzi wynika, że tworzysz klasę dla każdej metody osobną :P. Sorry ale wolę zostać przy swoim ;).
Sarrus
@somekind "ale niestosowanie wzorców, używanie kopiuj-wklej i podejście "a po co tak, przecież działa", powoduje powstawianie dużo więcej zbędnego kodu." - Ja piszę, że w granicach rozsądku, a metoda kopiego-pejsta do nich się nie zalicza. Mam wrażenie, że za dużo miałeś w życiu do czynienia z partaczami ;)
somekind
@Sarrus, opakowywanie jednego obiektu w inny faktycznie nie ma sensu, ale ja nigdy nie pisałem, żeby tak robić.
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Taka tam ciekawostka, że niektórym 255 parametrów (limit w pythonie) nie starcza -> https://twiki.cern.ch/twiki/bin/view/CMSPublic/SWGuidePythonTips#Running_on_more_than_255_files ;)


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
satirev
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 4 lata
1

Ostatnio mi się podoba mi się pomysł z opakowywaniem parametrów w złączenie named parameter idiom/packed parameter idiom z optionalami. Trochę więcej pisania (sądzę, że dałoby radę napisać coś generycznego i ładniejszego niż boost::parameter ; p) ale za to do funkcji przekazujemy tylko to co potrzebujemy w danej chwili, a funkcja przyjmuje jeden argument.
Oczywiście nie piszę tak w pracy ; >

M6
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 6 lat
  • Postów:220
0

64


Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)