Nullpointer metody

Nullpointer metody
MrZiomenOmen
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:28
0

Wywala mi tutaj Nullpointera dlaczego ? CHodzi mi o metody addEmployee

Kopiuj
package PAkietSQL;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import domain.Employee;

public class Main {
private static EntityManager entityManager;
private static EntityManagerFactory entityManagerFactory;

	public static void main(String[] args) {
		EntityManagerFactory entityManagerFactory =Persistence.createEntityManagerFactory("myDataBase") ;
EntityManager entityManager = entityManagerFactory.createEntityManager();

addEmployees();


entityManager.close();
entityManagerFactory.close();
	}

private static void addEmployees() {
	addEmployee("Maciek","ss", 2000);
	addEmployee("Maciek","ss", 2000);
	addEmployee("Maciek","ss", 2000);
	addEmployee("Maciek","ss", 2000);
	addEmployee("Maciek","ss", 2000);
	addEmployee("Maciek","ss", 2000);
	addEmployee("Maciek","ss", 2000);
	addEmployee("Maciek","ss", 2000);
	addEmployee("Maciek","ss", 2000);
	addEmployee("Maciek","ss", 2000);
	addEmployee("Maciek","ss", 2000);
	
}

private static void addEmployee(String firstName,String lastName, double salary)
{
	Employee employee=new Employee();
	employee.setFirstName(firstName);
	employee.setLastName(lastName);
	employee.setSalary(salary);
	
	entityManager.getTransaction().begin();
	entityManager.persist(employee);
entityManager.getTransaction().commit();
edytowany 1x, ostatnio: kq
Belka
  • Rejestracja:prawie 8 lat
  • Ostatnio:około 19 godzin
  • Lokalizacja:PL
  • Postów:452
0

Co jest tutaj nullem? entityManager?

R1
  • Rejestracja:prawie 7 lat
  • Ostatnio:11 miesięcy
  • Postów:7
0

W metodzie main tworzysz nową zmienną lokalną entityManager zamiast przypisać to do pola klasy.

MrZiomenOmen
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:28
0
radek1234 napisał(a):

W metodzie main tworzysz nową zmienną lokalną entityManager zamiast przypisać to do pola klasy.

ale dalej jest null

Exception in thread "main" java.lang.NullPointerException
at PAkietSQL.Main.addEmployee(Main.java:46)
at PAkietSQL.Main.addEmployees(Main.java:25)
at PAkietSQL.Main.main(Main.java:17)

twonek
pokaż jak poprawiłeś, bo dalej niewiele mówi
MrZiomenOmen
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:28
0
MrZiomenOmen napisał(a):
radek1234 napisał(a):

W metodzie main tworzysz nową zmienną lokalną entityManager zamiast przypisać to do pola klasy.

ale dalej jest null

Exception in thread "main" java.lang.NullPointerException
at PAkietSQL.Main.addEmployee(Main.java:46)
at PAkietSQL.Main.addEmployees(Main.java:25)
at PAkietSQL.Main.main(Main.java:17)

public static void main(String[] args) {

	EntityManagerFactory entityManagerFactory =Persistence.createEntityManagerFactory("myDataBase") ;

entityManagerFactory.createEntityManager();

addEmployees();

entityManager.close();
entityManagerFactory.close();

R1
  • Rejestracja:prawie 7 lat
  • Ostatnio:11 miesięcy
  • Postów:7
0

Teraz w ogóle nie przypisujesz wartości z entityManagerFactory.createEntityManager();
powinno być:
entityManager = entityManagerFactory.createEntityManager();

catom
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 2 lata
  • Postów:58
0

Spróbuj może używać obiektów i nie operuj na zmiennych i metodach statycznych.
Stwórz sobie np. klasę EmployeeRepository, która będzie miała metodę addEmployee().
Niech klasa EmployeeRepository ma pole EntityManager (najlepiej z modyfikatorem final) i wstrzykiwanie tej zależności odbywa się przez konstruktor. Wtedy nie dość, że kod będzie ładniej wyglądał, to jeszcze pomoże Ci to w uniknięciu takich dziwnych problemów.

Btw. to już bodajże 3. Twój post*, w którym masz problem z przypisywaniem i zasięgiem zmiennych. Może zerknij sobie na początek, na ten skrótowy wpis Java Variable Scope.


* Żeby nie być gołosłownym:

edytowany 1x, ostatnio: catom
MrZiomenOmen
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:28
0
catom napisał(a):

Spróbuj może używać obiektów i nie operuj na zmiennych i metodach statycznych.
Stwórz sobie np. klasę EmployeeRepository, która będzie miała metodę addEmployee().
Niech klasa EmployeeRepository ma pole EntityManager (najlepiej z modyfikatorem final) i wstrzykiwanie tej zależności odbywa się przez konstruktor. Wtedy nie dość, że kod będzie ładniej wyglądał, to jeszcze pomoże Ci to w uniknięciu takich dziwnych problemów.

Btw. to już bodajże 3. Twój post*, w którym masz problem z przypisywaniem i zasięgiem zmiennych. Może zerknij sobie na początek, na ten skrótowy wpis Java Variable Scope.


* Żeby nie być gołosłownym:

Nie rozmumiem tego wstrzykiwania przez konstruktor znalazłem coś takiego ale po co mi to jest właściwie
public class Shop {

private ShoppingCard shoppingCard;

@Autowired
public Shop(ShoppingCard shoppingCard) {
    this.shoppingCard = shoppingCard;
}

public void purchase() {
    shoppingCard.addProductToShoppingCard(new Product(1, "Milk"));
    shoppingCard.addProductToShoppingCard(new Product(2, "Tea"));
    shoppingCard.addProductToShoppingCard(new Product(3, "Bread"));
}

Rozumiem jak mam konstruktoe Employee(name,age) itd to że moge sobie zrobić tak Employee("Jaś",2) ale co mi daje np Employee(Card card) ?

catom
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 2 lata
  • Postów:58
0

Poprzez wstrzykiwanie przez konstruktor odnoszę się do jednej z technik programowania obiektowego - Dependency Injection - niekoniecznie z wykorzystaniem kontenerów i Inversion of Control.

Przykładowe źródła:

W Twoim przypadku, byłoby to:

Kopiuj
public class EmployeeRepository {
  
  private final EntityManager entityManager;
  
  public EmployeeRepository(EntityManager entityManager) { // o tu jest wstrzykiwanie zależności przez konstruktor - EntityManager jest Twoją zależnością
    this.entityManager = entityManager;
  }
  
  public void addEmployee(Employee employee) {
    // tutaj dodanie employee do bazy poprzez wykorzystanie wstrzykniętego wcześniej EntityManagera
  }
}

edytowany 2x, ostatnio: catom
Belka
Czy DI zadziała jeżeli on nie ma w projekcie Springa? Chodzi mi o niejawne @Inject / @Autowired
catom
@Belka: Tu nie chodzi o kontener IoC tylko o DI jako o koncept. Dependency Injection, jako koncept, nie musi w ogóle mieć nic w spólnego z JEE, Springiem czy innym Guicem.
MrZiomenOmen
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:28
0
catom napisał(a):

Poprzez wstrzykiwanie przez konstruktor odnoszę się do jednej z technik programowania obiektowego - Dependency Injection - niekoniecznie z wykorzystaniem kontenerów i Inversion of Control.

Przykładowe źródła:

W Twoim przypadku, byłoby to:

Kopiuj
public class EmployeeRepository {
  
  private final EntityManager entityManager;
  
  public EmployeeRepository(EntityManager entityManager) { // o tu jest wstrzykiwanie zależności przez konstruktor - EntityManager jest Twoją zależnością

no dobra ale czym się to różni ? i po co mi to jest w konstruktorze w ogóle jak mam pole ?

this.entityManager = entityManager;

}

public void addEmployee(Employee employee) {
// tutaj dodanie employee do bazy poprzez wykorzystanie wstrzykniętego wcześniej EntityManagera
}
}

Kopiuj
MrZiomenOmen
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:28
0
catom napisał(a):

Poprzez wstrzykiwanie przez konstruktor odnoszę się do jednej z technik programowania obiektowego - Dependency Injection - niekoniecznie z wykorzystaniem kontenerów i Inversion of Control.

Przykładowe źródła:

W Twoim przypadku, byłoby to:

Kopiuj
public class EmployeeRepository {
  
  private final EntityManager entityManager;
  
  public EmployeeRepository(EntityManager entityManager) { // o tu jest wstrzykiwanie zależności przez konstruktor - EntityManager jest Twoją zależnością
    this.entityManager = entityManager;
  }
  
  public void addEmployee(Employee employee) {
    // tutaj dodanie employee do bazy poprzez wykorzystanie wstrzykniętego wcześniej EntityManagera
  }
}

Rozumiem że ta metoda jest przeciążona ?

public void addEmployee(Employee employee) {

// tutaj dodanie employee do bazy poprzez wykorzystanie wstrzykniętego wcześniej EntityManagera

}

baant
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Wrocław
  • Postów:524
0

Niby czemu przeciążona

catom
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 2 lata
  • Postów:58
0

no dobra ale czym się to różni ? i po co mi to jest w konstruktorze w ogóle jak mam pole ?

W konstruktorze jest Ci to po to, żeby zależność przypisać podczas tworzenia obiektu. Samo Dependency Injection przyda Ci się np. w sytuacji, gdy potrzebujesz zmienić implementację swojej zależności.
Co do samych zalet (i wad) DI - znajdziesz je choćby w artykule do Wikipedii, który wcześniej podlinkowałem.

Oczywiście, że masz pole i obiekt przypisany do tego pola jest Twoją zależnością. Ale jakoś musisz to pole przypisać, żeby mieć referencję do instancji tej zależności. Gdybyś przypisywał to pole w konstruktorze, wówczas użycie Twojego obiektu z tym polem wymuszałoby na Tobie przekazanie od razu tej zależności i nie miałbyś problemu, że gdzieś w kodzie tworzysz sobie obiekt typu Twojej zależności, ale zapomniałeś go przypisać do tego pola.
Dokładnie to zrobiłeś w swoim kodzie z 1. postu.

Chodzi o takie wymuszenie:

Kopiuj
// Repozytorium, jak wcześniej
public class EmployeeRepository {

  private final EntityManager entityManager;

  public EmployeeRepository(EntityManager entityManager) {
    this.entityManager = entityManager;
  }

  public void addEmployee(Employee employee) {
    // tutaj dodanie employee do bazy poprzez wykorzystanie wstrzykniętego wcześniej EntityManagera
  }
}

// i przykład użycia
public class Main {
  public static void main(String... args) {
    final EntityManager entityManager = Main.createEntityManager();
    final EmployeeRepository employeeRepostiory = new EmployeeRepository(entityManager); // tu jest to wymuszenie - bez przekazania EntityManager 
    // do konstruktora nie możesz utworzyć obiektu EmployeeRepository
    // dzięki temu, nigdy nie utworzysz EmployeeRepository, które nie będzie miało przypisanego pola "entityManager"
    
    // i tu odrobinę zmodyfikowany Twój dotychczasowy kod
   
    // utworzenie obiektów Employee do zapisania
    final List<Employee> employees = createEmployees();
    // i dla każdego z utworzonych Employee wołamy employeeRepository.addEmployee()
    // 1. z życiem metody Collection#forEach i method reference
    employees.forEach(employeeRepository::addEmployee);
    // 2. klasycznie, z for-each
    for(Employee employee : employees) {
      employeeRepository.addEmployee(employee);
    }
  }
  
  private static EntityManager createEntityManager() {
    EntityManagerFactory entityManagerFactory =Persistence.createEntityManagerFactory("myDataBase") ;
    return entityManagerFactory.createEntityManager();
  }

  private static List<Employee> createEmployees() {
    return List.of(
      createEmployee("Maciek", "ss", 2000),
      createEmployee("Maciek", "ss", 2000),
      createEmployee("Maciek", "ss", 2000),
      createEmployee("Maciek", "ss", 2000),
      createEmployee("Maciek", "ss", 2000),
      createEmployee("Maciek", "ss", 2000),
      createEmployee("Maciek", "ss", 2000),
      createEmployee("Maciek", "ss", 2000),
      createEmployee("Maciek", "ss", 2000),
      createEmployee("Maciek", "ss", 2000),
      createEmployee("Maciek", "ss", 2000)
    );
  }
  
  private static Employee createEmployee(String firstName, String lastName, long salary) {
    Employee employee=new Employee();
    employee.setFirstName(firstName);
    employee.setLastName(lastName);
    employee.setSalary(salary);
    return employee;
  }
}

Powyższe rozwiązanie mogłoby być jeszcze ładniejsze stosując choćby Single Responsibility itd., ale nie o tym teraz rozmawiamy, więc starałem się zachować zgodność z Twoim dotychczasowym kodem.

Rozumiem że ta metoda jest przeciążona ?

Nic tu nie jest przeciążone. To jest po prostu przykład metody, która mogłaby zapisywać Employee.

edytowany 1x, ostatnio: catom
MrZiomenOmen
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:28
0
catom napisał(a):

no dobra ale czym się to różni ? i po co mi to jest w konstruktorze w ogóle jak mam pole ?

W konstruktorze jest Ci to po to, żeby zależność przypisać podczas tworzenia obiektu. Samo Dependency Injection przyda Ci się np. w sytuacji, gdy potrzebujesz zmienić implementację swojej zależności.
Co do samych zalet (i wad) DI - znajdziesz je choćby w artykule do Wikipedii, który wcześniej podlinkowałem.

Oczywiście, że masz pole i obiekt przypisany do tego pola jest Twoją zależnością. Ale jakoś musisz to pole przypisać, żeby mieć referencję do instancji tej zależności. Gdybyś przypisywał to pole w konstruktorze, wówczas użycie Twojego obiektu z tym polem wymuszałoby na Tobie przekazanie od razu tej zależności i nie miałbyś problemu, że gdzieś w kodzie tworzysz sobie obiekt typu Twojej zależności, ale zapomniałeś go przypisać do tego pola.
Dokładnie to zrobiłeś w swoim kodzie z 1. postu.

Chodzi o takie wymuszenie:

Kopiuj
// Repozytorium, jak wcześniej
public class EmployeeRepository {

  private final EntityManager entityManager;

  public EmployeeRepository(EntityManager entityManager) {
    this.entityManager = entityManager;
  }

  public void addEmployee(Employee employee) {
    // tutaj dodanie employee do bazy poprzez wykorzystanie wstrzykniętego wcześniej EntityManagera
  }
}

// i przykład użycia
public class Main {
  public static void main(String... args) {
    final EntityManager entityManager = Main.createEntityManager();
    final EmployeeRepository employeeRepostiory = new EmployeeRepository(entityManager); // tu jest to wymuszenie - bez przekazania EntityManager 
    // do konstruktora nie możesz utworzyć obiektu EmployeeRepository
    // dzięki temu, nigdy nie utworzysz EmployeeRepository, które nie będzie miało przypisanego pola "entityManager"
    
    // i tu odrobinę zmodyfikowany Twój dotychczasowy kod
   
    // utworzenie obiektów Employee do zapisania
    final List<Employee> employees = createEmployees();
    // i dla każdego z utworzonych Employee wołamy employeeRepository.addEmployee()
    // 1. z życiem metody Collection#forEach i method reference
    employees.forEach(employeeRepository::addEmployee);
    // 2. klasycznie, z for-each
    for(Employee employee : employees) {
      employeeRepository.addEmployee(employee);
    }
  }
  
  private static EntityManager createEntityManager() {
    EntityManagerFactory entityManagerFactory =Persistence.createEntityManagerFactory("myDataBase") ;
    return entityManagerFactory.createEntityManager();
  }

  private static List<Employee> createEmployees() {
    return List.of(
      createEmployee("Maciek", "ss", 2000),
      createEmployee("Maciek", "ss", 2000),
      createEmployee("Maciek", "ss", 2000),
      createEmployee("Maciek", "ss", 2000),
      createEmployee("Maciek", "ss", 2000),
      createEmployee("Maciek", "ss", 2000),
      createEmployee("Maciek", "ss", 2000),
      createEmployee("Maciek", "ss", 2000),
      createEmployee("Maciek", "ss", 2000),
      createEmployee("Maciek", "ss", 2000),
      createEmployee("Maciek", "ss", 2000)
    );
  }
  
  private static Employee createEmployee(String firstName, String lastName, long salary) {
    Employee employee=new Employee();
    employee.setFirstName(firstName);
    employee.setLastName(lastName);
    employee.setSalary(salary);
    return employee;
  }
}

Powyższe rozwiązanie mogłoby być jeszcze ładniejsze stosując choćby Single Responsibility itd., ale nie o tym teraz rozmawiamy, więc starałem się zachować zgodność z Twoim dotychczasowym kodem.

Rozumiem że ta metoda jest przeciążona ?

Nic tu nie jest przeciążone. To jest po prostu przykład metody, która mogłaby zapisywać Employee.

Nie zwraca mi listy

The method of(Employee, Employee, Employee, Employee, Employee, Employee, Employee, Employee, Employee, Employee, Employee) is
undefined for the type List

podkreslone List.of

catom
Której wersji Javy używasz? Kod pisałem akurat tylko w edytorze tekstowym na forum. Jeśli używasz wersji starszej niż JDK 9, to zrób po prostu Arrays.asList(), jak z resztą napisali koledzy w poniższych postach.
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Może chciałeś jednak Arrays.asList(cośtam, cośtam, cośtam...)?


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
baant
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Wrocław
  • Postów:524
0

List.of(...) jest od jdk 9

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)