Gettery i settery w Javie

Gettery i settery w Javie
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
2

@wioletta90 ech różne rzeczy "można" zrobić, ale raczej się nie zaleca. Tworzenie "pustego" obiektu a potem wypełnianie go danymi sprawia że:

  • obiekt jest mutowalny, bo jakoś trzeba było mu ustawić wartości, a mutowalność oznacza że ryzykujesz pracę z niespójnymi obiektami (np. przypadkiem gdzieś w kodzie dla któregoś obiektu nastąpi zmiana jakiegoś pola). Już nawet nie będę mówił jakie cuda się mogą dziać jak ktoś przypadkiem zmutuje sobie jakiś obiekt połączony z bazą danych (np. jakieś @Entity) i mu nagle wiersze z bazy zaczną znikać (tak tak, widziałem takie rzeczy w dużych systemach ;]).
  • masz obiekt który nie jest do końca zajnicjalizowany i ryzykujesz pracę z takim obiektem
  • łatwo przeoczyć jakiś setter kiedy jest ich dużo i dostajesz obiekt który nie jest poprawnie zainicjalizowany

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
MA
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:2
2
Shalom napisał(a):

@wioletta90 ech różne rzeczy "można" zrobić, ale raczej się nie zaleca. Tworzenie "pustego" obiektu a potem wypełnianie go danymi sprawia że:

  • obiekt jest mutowalny, bo jakoś trzeba było mu ustawić wartości, a mutowalność oznacza że ryzykujesz pracę z niespójnymi obiektami (np. przypadkiem gdzieś w kodzie dla któregoś obiektu nastąpi zmiana jakiegoś pola). Już nawet nie będę mówił jakie cuda się mogą dziać jak ktoś przypadkiem zmutuje sobie jakiś obiekt połączony z bazą danych (np. jakieś @Entity) i mu nagle wiersze z bazy zaczną znikać (tak tak, widziałem takie rzeczy w dużych systemach ;]).
  • masz obiekt który nie jest do końca zajnicjalizowany i ryzykujesz pracę z takim obiektem
  • łatwo przeoczyć jakiś setter kiedy jest ich dużo i dostajesz obiekt który nie jest poprawnie zainicjalizowany

Ej jeszcze ja jedną rzecz mogę dodać !! jak masz mutowalny obiekt to brak gwarancji na visibility pomiędzy wątkami - final w immutable spowoduje wywołanie sfence pod spodem

edytowany 1x, ostatnio: maryiusz_aurel_do_kuchni
W9
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 lata
  • Postów:132
0

W klasie Osoba brakuje Ci konstruktora, który przyjmie te dwa parametry.

Cały czas myślałam, że konstruktor służy tylko do tworzenia nowego obiektu, np.:

Kopiuj
Osoba osobnik = new Osoba(imie, nazwisko);

bo za każdym razem gdy szukam informacji o konstruktorach to takie dostaję informacje zwrotne, długo nie wiedziałam o co chodzi... że brakuje mi konstruktora który coś przejmuje, dopiero po kilku godzinach szukania, przez przypadek na YT znalazłam jak ktoś pokazał że konstruktory można stworzyć a nie tylko wywołać.

Więc chyba muszę stworzyć coś takiego:

Kopiuj
    public Osoba()
    {

    }

Wygląda banalnie, ale jak zrobić żeby to on coś przejmował ?

Z tego co przeczytałam, konstruktor się tworzy z jakimiś parametrami żeby później wywoływać go na rzecz tworzenia nowego obiektu, a z tego co mi tu wyszło w programie, wygląda na coś innego.

Nomysz
Myślę, że przerabiając na spokojnie materiały z google na temat javy, spokojnie odpowiedziałabyś sobie sama na te pytania :)
W9
przerabiam od kilku dni, przecież chce się tego nauczyć, po co miałabym utrudniać
KA
póki co @wioletta90 dobrze Ci idzie. Nie mówię tego ironicznie tylko na serio. Miałam tak samo po kilku dniach a nawet znacznie gorzej
szarotka
heh i myślisz że ci wierzymy?
Maciej Cąderek
Maciej Cąderek
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Warszawa
  • Postów:1264
1

Tak jak w każdej innej metodzie. Różnica jest tylko w wywołaniu - jest wywoływany raz, automatycznie przy tworzeniu obiektu.

W9
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 lata
  • Postów:132
0
Kopiuj
    public Osoba(imie, nazwisko)
    {

    }

to mi teraz imie podkreśla jako błąd

Nomysz
A typ zmiennej?
W9
String imie; nie pomaga
Nomysz
https://ideone.com/4IAjzX robisz anologicznie, jak tutaj.
shagrin
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 6 lat
  • Lokalizacja:Norwegia, Stavanger
2

@wioletta90 jesteś bardzo blisko rozwiązania problemu. Przeanalizuj jeszcze raz kod, zobacz czy nie pomyliłaś się gdzieś (nawiasy, przecinki, średniki, etc).

Podsumowując masz:

  • Klasę Osoba która ma dwa pola (imię i nazwisko) oraz konstruktor, który ustawi te zmienne:
Kopiuj
public Osoba(String imie, String nazwisko)
{
	this.imie=imie;
	this.nazwisko=nazwisko;
}
  • masz też klasę KlasaZMain z metodą main, w której tworzysz obiekt Osoba:
Kopiuj
Scanner wczytywarka = new Scanner(System.in);
 
System.out.println("Podaj swoje imie: ");
String imie = pobierzDane(wczytywarka);
 
System.out.println("Podaj swoje nazwisko: ");
String nazwisko = pobierzDane(wczytywarka);
 
Osoba osobnik = new Osoba(imie, nazwisko);

Masz dwa oddzielne pliki Osoba.java i KlasaZMain.java?


W9
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 lata
  • Postów:132
0

Mam tylko Osoba.java

Mam taki błąd:

public static void main(String[] args)

a program proponuje usunąć static, dlaczego ?
Jeszcze nie widziałam metody main bez static.

shagrin
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 6 lat
  • Lokalizacja:Norwegia, Stavanger
1

Jest taka ogólna zasada w Javie - każdą klasę trzymamy w oddzielnym pliku. Oczywiście, są odstępstwa, ale póki co przyjmijmy, że tak jest. W jednym z ostatnich listingów wygląda, jakbyś pomyliła nawiasy {} i jakby KlasaZMain była zawarta w klasie Osoba. To powinny być dwie oddzielne klasy.


W9
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 lata
  • Postów:132
0

Faktycznie była zawarta w klasie Osoba. Zrobiłam jak mówisz, 2 oddzielnie pliki na klasy, błąd zniknął, został tylko podkreślony Scanner w dwóch miejscach, tam gdzie jest metoda pobierzDane

Kopiuj
public class KlasaZMain {

	public static void main(String[] args) {
		Scanner wczytywarka = new Scanner(System.in);
		
		
		System.out.println("Podaj swoje imie: ");
		String imie = pobierzDane(Scanner);
		
		
		System.out.println("Podaj swoje nazwisko: ");
		String nazwisko = pobierzDane(Scanner);
		
		Osoba osobnik = new Osoba(imie, nazwisko);
	}

}

jak nie przekazywałam Scanneru jako parametr do metody pobierzDane, błędu nie było

edytowany 1x, ostatnio: wioletta90
shagrin
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 6 lat
  • Lokalizacja:Norwegia, Stavanger
1

A co tam przekazujesz? Scanner? A co to za obiekt wczytywarka?
pobierzDane(Scanner)


edytowany 1x, ostatnio: shagrin
W9
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 lata
  • Postów:132
0

wcześniej moja metoda wyglądała tak:

Kopiuj
  public static String pobierzDane() 
    {
        return wczytywarka.nextLine();
    }

i w taki sposób działała

Kopiuj
String imie = pobierzDane();

a teraz mam

Kopiuj
		public static String pobierzDane(Scanner wczytywarka) 
		{
		    return wczytywarka.nextLine();
		}

to powinno działać tak:

Kopiuj
String imie = pobierzDane(Scanner wczytywarka) ; 

niestety nie działa, próbowałam też

Kopiuj
pobierzDane(Scanner wczytywarka)
pobierzDane(wczytywarka)
pobierzDane()
katelx
  • Rejestracja:prawie 10 lat
  • Ostatnio:4 miesiące
  • Lokalizacja:Hong Kong
3

@wioletta90 naucz sie skladni javy, bedzie to bardziej efektywne od probowania wlasnych wersji skladni ktore nawet sie nie kompiluja. w jezykach programowania nie jest tak jak w polskim czy angielskim ze rozmowca sie domysli o co chodzi.

Zobacz pozostałe 2 komentarze
katelx
jasne ze mozna metoda prob i bledow pisac byle co + pytajc o kazda linijke na forum ale mysle ze bedzie ci latwiej i szybciej nauczyc sie podstaw skladni
W9
To nie jest metoda prób i błędów i nie pisze byle co, widocznie ktoś przeczytał 2 posty z 5 stron i nie wie co się dzieje.
katelx
pobierzDane(Scanner wczytywarka) to powiedz mi co to jest jak nie strzelanie slepakami. bo na pewno nie jest to skladnia javy na wywolanie metody
W9
myślałam że chodzi o cały temat, nie znalazłam jeszcze normalnego źródła z którego mogę się uczyć javy więc ta metoda w tym przypadku była dla mnie ok
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

O RLY? I jaki niby błąd pokazała wersja String imie = pobierzDane(wczytywarka);?


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Nomysz
  • Rejestracja:prawie 10 lat
  • Ostatnio:ponad 6 lat
  • Postów:60
0

Chyba zapomniałaś zrobić:

Kopiuj
import java.util.Scanner;
Kopiuj
public static String pobierzDane(Scanner wczytywarka) 
        {
            return wczytywarka.nextLine();
        }
....
Scanner wczytywarka = new Scanner(System.in);
.....
String name = pobierzDane(wczytywarka);
W9
jeżeli chodzi o import to go mam, nadal mi podkreśla
W9
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 lata
  • Postów:132
0
Shalom napisał(a):

O RLY? I jaki niby błąd pokazała wersja String imie = pobierzDane(wczytywarka);?

podkresla mi pobierzDane a program proponuje stworzyć metode pobierzDane(Scanner), a taką już mam w klasie Osoba.java

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

o_O ale czemu masz ją w klasie Osoba? Przecież to w ogóle nie miałoby sensu.

PS: http://pl.indeed.com/Praca-Pomocnik-Piekarza zainteresuj się może :)


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
W9
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 lata
  • Postów:132
0

Przeniosłam metodę do main i nie ma już błędu.
Ogólnie chciałam rozbudować prosty program który pyta o imie, nazwisko aby były w nim gettery i settery, a tak się złożyło, że settery zostały usunięte, a gettery ? Chyba też nie są używane i można usunąć.

a więc o co chodzi ?

Finalna wersja:

Plik Osoba.java

Kopiuj
package imie;

import java.util.Scanner;

public class Osoba {

	 private final String imie;
	    private final String nazwisko;
		
	    public Osoba(String imie, String nazwisko)
	    {
	        this.imie=imie;
	        this.nazwisko=nazwisko;
	    }
	    
	    public String getImie() {
	    	return imie;
	    }
	    
	    
	    public String getNazwisko() {
	    	return nazwisko;
	    }
	
	
	
}

Plik KlasaZMain.java

Kopiuj
package imie;

import java.util.Scanner;

public class KlasaZMain {

	public static void main(String[] args) {

		Scanner wczytywarka = new Scanner(System.in);
		
		
		System.out.println("Podaj swoje imie: ");
		String imie = pobierzDane(wczytywarka) ; 
		
		
		System.out.println("Podaj swoje nazwisko: ");
		String nazwisko = pobierzDane(wczytywarka);
		
		Osoba osobnik = new Osoba(imie, nazwisko);
		
		
		
	}

	public static String pobierzDane(Scanner wczytywarka) 
	{
	    return wczytywarka.nextLine();
	}
	
	
}

mad_penguin
mad_penguin
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Rzeszów
0

Możesz teraz rozbudować program, żeby wyświetlał np. "Witaj, Imię Nazwisko", wtedy będziesz mogła użyć getterów ;)

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

Albo wczytaj w ten sposób 10 Osób do List<Osoba> a potem odfiltruj tych których imie zaczyna się na 'A' i juz się gettery przydadzą ;]


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
W9
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 lata
  • Postów:132
0

Możesz teraz rozbudować program, żeby wyświetlał np. "Witaj, Imię Nazwisko", wtedy będziesz mogła użyć getterów ;)

Zrobiłam tak bez getterów.

Kopiuj
System.out.println(" Twoje imie: " + imie + " Twoje nazwisko: " + nazwisko );

Jak można zrobić to z getterami ?

Albo wczytaj w ten sposób 10 Osób do List<Osoba> a potem odfiltruj tych których imie zaczyna się na 'A' i juz się gettery przydadzą ;]

Chcę to zrobić, ale najpierw muszę o tym poczytać, bo aktualnie nic nie wiem na ten temat.
Znajdę to pod słowami kluczowymi tablicy,listy ? Coś takiego? Mam nadzieję że będzie tam przy okazji informacja jak odfiltrowywać.

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

@wioletta90 no brawo, ale ten kod który pokazałaś musiałby być w klasie Osoba, a nie da się tam wepchnąć wszystkich możliwych operacji jakie sobie wymyślisz. A zwykle w ogóle to inny obiekt coś chce robić z tymi twoimi Osobami.
Wyobraź sobie np. że piszesz grę w karty, w oczko na przykład. Masz klasę Karta która ma pole "wartość". W jaki sposób sprawdzisz czy ktoś wygrał/przegrał? Musisz zsumować wartość wszystkich jego kart. Jak to teraz zrobisz?


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
MD
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:280
1

Jeżeli zaczynasz nie przejmuj się obiektami mutowalnymi, niemutowalnymi i skup się na getterach setterach

Kopiuj
 
public class Osoba {
 
        private String imie;
        private String nazwisko;
 
       //dodaj te settery

        public String getImie() {
            return imie;
        }
 
 
        public String getNazwisko() {
            return nazwisko;
        }
}

Tera wyjaśnienie gettery i settery wzięły się z jakiś głupich praktyk, mówiono, że ukrywają implementację ale to głupota, tak się robi i już. Co nam tak dają na prawdę ?

  • atomowość operacji np:
Kopiuj
 
public void setPoints(int x, int y){
 this.x = x;
 this.y = y;
}

|
W ten sposób wywołując

Kopiuj
setPoints(5,2)

ustawimy współrzędne w jednej linijcie a za pomocą publicznych pól w dwóch linijkach.

  • możemy zabronić odczytu z pól i pozwolić zapisywać
    Jeżeli chcemy, żeby użytkownik tylko zapisywał do pól, ale nie mógł odczytywać generujemy setter i tyle. Zazwyczaj taki setter będzie świadczył o złej decyzji projektowej. Wszystkie inne kombinacje można ogarnąć słowami public private i final.

EDIT: chociaż ja jestem sceptycznie nastawiony do tego typu getterów/setterów są tacy co powiedzą, że są niezbędnę. Różnica poglądów, po prostu je generuj i tyle.

edytowany 2x, ostatnio: MoorfoxD
W9
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 lata
  • Postów:132
0

no brawo, ale ten kod który pokazałaś musiałby być w klasie Osoba

Dlaczego? Napisałam to w klasie KlasaZMain i działa.

W jaki sposób sprawdzisz czy ktoś wygrał/przegrał? Musisz zsumować wartość wszystkich jego kart. Jak to teraz zrobisz?

Każda karta miałaby przypisaną jakąś wartość i zmienną, więc wystarczyłoby dodać wszystkie zmienne ?

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

@wioletta90 haha no dobra, ale wtedy ten kod wcale nie operuje na obiekcie osoba tylko na ostatnich wczytanych wartościach do tych lokalnych zmiennych :D A to ma tyle wspólnego co picie w szczawnicy ze szczaniem w piwnicy. Zrób w takim razie 2 obiekty osoba i jak już będziesz miała osoba1 i osoba2 to wypisz imiona i nazwiska. Albo wypisz najpierw same imiona a następnie same nazwiska ;]

Każda karta miałaby przypisaną jakąś wartość i zmienną, więc wystarczyłoby dodać wszystkie zmienne ?

Ale jak chcesz wyciągnąć wartości tych zmiennych skoro to są prywatne pola klasy Karta?


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
W9
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 lata
  • Postów:132
0

Chyba już wiem o co chodzi, czyli kod ma wyglądać mniej więcej tak:

Kopiuj
System.out.println(" Twoje imie: " + Osoba.getImie() + " Twoje nazwisko: " + Osoba.getNazwisko() );

bo zmienne mamy private, dlatego własnie są tu potrzebne gettery ?
Tylko żeby wywołać zmienne za pomocą getterów muszę zmienić gettery na static, przeczytałam że dopisek static pozwala na korzystanie z tego w metodzie main(), więc w sumie się zgadza, ale wtedy w getterach mam podkreślone imie i nazwisko, przez co program chce tam też dopisać static przy final,a a wtedy podkreślone znowu są zmienne w konstruktorze, a tu program znowu mówi żeby usunąć te finaly z początku klasy. To co z tym final ?

edytowany 1x, ostatnio: wioletta90
shagrin
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 6 lat
  • Lokalizacja:Norwegia, Stavanger
1

Musisz pamietać, że operujesz na utworzonym obiekcie klasy, czyli np. obiekcie osobnik.
Gettery nie powinny być static w przypadku Twojej klasy Osoba.

Popraw i zobacz jaki będzie efekt.


W9
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 lata
  • Postów:132
0

Popraw i zobacz jaki będzie efekt.

Faktycznie działa.

Zrób w takim razie 2 obiekty osoba i jak już będziesz miała osoba1 i osoba2 to wypisz imiona i nazwiska. Albo wypisz najpierw same imiona a następnie same nazwiska ;]

Chyba mi wyszło:

Kopiuj
package imie;

import java.util.Scanner;

public class KlasaZMain {

	public static void main(String[] args) {

		Scanner wczytywarka = new Scanner(System.in);
		
		
		System.out.println("Podaj swoje imie: ");
		String imie = pobierzDane(wczytywarka) ; 
		
		System.out.println("Podaj 2 imie: ");
		String imie1 = pobierzDane(wczytywarka) ; 
		
		System.out.println("Podaj swoje nazwisko: ");
		String nazwisko = pobierzDane(wczytywarka);
		
		System.out.println("Podaj swoje nazwisko: ");
		String nazwisko1 = pobierzDane(wczytywarka);		
		
		Osoba osobnik = new Osoba(imie, nazwisko);
		
		Osoba osobnik1 = new Osoba(imie1, nazwisko1);
		
		System.out.println(" Imie1 : " + osobnik.getImie() + " Imie 2 : " + osobnik1.getImie() );
		
			
		System.out.println(" Nazwisko 1: " + osobnik.getNazwisko()  + " Nazwisko 2: " + osobnik1.getNazwisko() );
		
		
	}

	public static String pobierzDane(Scanner wczytywarka) 
	{
	    return wczytywarka.nextLine();
	}
	
	
}
MD
6 stron dyskusji tylko po to, żeby ustawić gettery settery
W9
po to żeby to zrobić ze zrozumieniem, a dużo innych rzeczy się też nauczyłam w tym temacie
W9
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 lata
  • Postów:132
0

a jak mogę rozbudować ten program żeby nie dało się uniknąć setterów ?

MD
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:280
1

Jeżeli twoje pola są finalne to nie wygenerujesz setterów, chyba że tak:

Kopiuj
 
public class Osoba {
 
     private final String imie;
        private final String nazwisko;
 
        public Osoba(String imie, String nazwisko)
        {
            this.imie=imie;
            this.nazwisko=nazwisko;
        }
 
        public String getImie() {
            return imie;
        }
 
 
        public String getNazwisko() {
            return nazwisko;
        }

public Osoba setImie(String imie) {
   return new Osoba(imie, nazwisko);
}

public Osoba seNaziwsko(String nazwisko) {
   return new Osoba(imie, nazwisko);
}
 
 
 
 
}

Ale nie rób tak

edytowany 1x, ostatnio: MoorfoxD
W9
czemu tak nie robić ?
MD
co ci mówi nazwa metody setImie ? ustaw Imie... zwracanie tego samego domain objectu w domain objecie o tym samym typie będzie mylące i nienaturalne dla innych programistów. setImie ustaw imie tyle powinna robić metoda, żadnego zwracania. Immutable objecty są dobre w programowaniu funkcyjnym jak dla mnie przenoszenie ich wszędzie, gdzie będzie wykorzystywany kod imperatywny jest dziwne, ale ktoś może mieć inne zdanie.
shagrin
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 6 lat
  • Lokalizacja:Norwegia, Stavanger
1

@wioletta90 jeśli chcesz używać setterów, musiałabyś usunąć final z atrybutów klasy Osoba i utworzyć settery dla imienia i nazwiska.


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)