> For the complete documentation index, see [llms.txt](https://primer2.dynamobim.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://primer2.dynamobim.org/pl/8_coding_in_dynamo/8-1_code-blocks-and-design-script/3-shorthand.md).

# Krótka składnia

### Krótka składnia

W węźle Code Block dostępnych jest kilka podstawowych metod o krótkiej składni, które *znacznie* ułatwiają zarządzanie danymi. Podstawy zostały szczegółowo omówione poniżej. Wyjaśniamy też, jak za pomocą tej krótkiej składni można tworzyć dane i stosować do nich zapytania.

| **Typ danych**             | **Standard dodatku Dynamo** | **Odpowiednik w węźle Code Block** |
| -------------------------- | --------------------------- | ---------------------------------- |
| Liczby                     | !                           | !                                  |
| Ciągi                      | !                           | !                                  |
| Sekwencje                  | !                           | !                                  |
| Zakresy (przedziały)       | !                           | !                                  |
| Pobierz element o indeksie | !                           | !                                  |
| Tworzenie listy            | !                           | !                                  |
| Scalanie ciągów            | !                           | !                                  |
| Instrukcje warunkowe       | !                           | !                                  |

### Dodatkowa składnia

|                                        |                                    |                                                                                        |
| -------------------------------------- | ---------------------------------- | -------------------------------------------------------------------------------------- |
| **Węzły**                              | **Odpowiednik w węźle Code Block** | **Uwaga**                                                                              |
| Dowolny operator (+, &&, >=, Not itp.) | +, &&, >=, ! itp.                  | Uwaga: „Not” staje się „!”, ale węzeł nazywa się „Not”, aby odróżnić go od „Factorial” |
| Wartość logiczna True                  | true;                              | Uwaga: małe litera                                                                     |
| Wartość logiczna False                 | false;                             | Uwaga: małe litera                                                                     |

### Zakresy i sekwencje

Metoda definiowania zakresów i sekwencji może zostać zredukowana do krótkiej składni. Poniższa ilustracja przedstawia składnię „..”, która umożliwia definiowanie listy danych liczbowych za pomocą bloku kodu. Po zaznajomieniu się z tą notacją tworzenie danych liczbowych jest bardzo wydajnym procesem:

!

> 1. W tym przykładzie zakres liczb zostaje zastąpiony podstawową składnią węzła **Code Block** definiującą `beginning..end..step-size;`. Liczbowo będzie to: `0..10..1;`
> 2. Warto zauważyć, że składnia `0..10..1;` odpowiada `0..10;` Wielkość kroku równa 1 jest domyślną wartością w krótkiej składni. Dlatego `0..10;` daje sekwencję od 0 do 10 o kroku 1.
> 3. Przykład *Sequence* jest podobny, ale do ustawienia 15 wartości na liście używamy znaku „#” zamiast listy do 15. W tym przypadku definiujemy: `beginning..#ofSteps..step-size:` Rzeczywista składnia dla tej sekwencji to `0..#15..2`
> 4. Używając znaku *„#”* z poprzedniego kroku, umieścimy go teraz w części *„rozmiar-kroku”* składni. Teraz mamy zakres liczb (*Number Range*) od początku *„beginning”* do końca *„end”* z ustalonym rozmiarem kroku *„step-size”*, co powoduje równomierne rozmieszczenie wartości między dwoma punktami: `beginning..end..#ofSteps`

### Zakresy zaawansowane

Tworzenie zakresów zaawansowanych pozwala na łatwe korzystanie z listy list. W poniższych przykładach wyodrębniamy zmienną z notacji zakresu głównego i tworzymy inny zakres tej listy.

!

> 1\. Tworząc zakresy zagnieżdżone, porównaj notację z „#” z notacją bez tego znaku. Zastosowanie ma ta sama logika co w zakresach podstawowych, choć rozwiązanie jest nieco bardziej złożone.
>
> 2\. Możemy zdefiniować zakres podrzędny w dowolnym miejscu w zakresie głównym i możemy też używać dwóch zakresów podrzędnych.
>
> 3\. Sterując wartością „końca” w zakresie, tworzymy więcej zakresów o różnych długościach.

W ramach ćwiczenia logicznego porównaj dwie wersje krótkiej składni i spróbuj przeanalizować, w jaki sposób *zakresy podrzędne* i notacja *#* wpływają na wynik na wyjściu.

!

### Tworzenie list i pobieranie elementów z listy

Poza tworzeniem list za pomocą krótkiej składni możemy również tworzyć listy na bieżąco. Te listy mogą zawierać szeroki zakres typów elementów i można stosować do nich zapytania (należy pamiętać, że listy to także obiekty). Podsumowując: blok kodu pozwala tworzyć listy i stosować zapytania o elementy z listy za pomocą nawiasów kwadratowych:

!

> 1\. Szybko twórz listy za pomocą ciągów i stosuj do nich zapytania, korzystając z indeksu elementu.
>
> 2\. Twórz listy ze zmiennymi i stosuj do nich zapytania za pomocą notacji krótkiej składni zakresu.

Zarządzanie z listami zagnieżdżonymi jest podobnym procesem. Pamiętaj o kolejności listy i o korzystaniu z wielu zestawów nawiasów kwadratowych:

!

> 1\. Zdefiniuj listę list.
>
> 2\. Zastosuj zapytanie do listy za pomocą notacji z jedną parą nawiasów kwadratowych.
>
> 3\. Zastosuj zapytanie do elementu za pomocą notacji z dwiema parami nawiasów kwadratowych.

## Ćwiczenie: powierzchnia sinusoidalna

> Pobierz plik przykładowy, klikając poniższe łącze.
>
> Pełna lista plików przykładowych znajduje się w załączniku.

{% file src="/files/aGLkHE1ayxfnB5qpw75r" %}

W tym ćwiczeniu przećwiczymy nowe umiejętności dotyczące krótkiej składni, aby utworzyć „jajowatą” powierzchnię zdefiniowaną przez zakresy i formuły. W trakcie ćwiczenia zwróć uwagę na to, w jaki sposób używane są blok kodu i istniejące węzły Dynamo: blok kodu jest używany do złożonej obsługi danych, natomiast węzły Dynamo są rozmieszczone wizualnie w celu zapewnienia czytelności definicji.

Rozpocznij od utworzenia powierzchni przez połączenie powyższych węzłów. Zamiast używać węzła number do zdefiniowania szerokości i długości, kliknij dwukrotnie obszar rysunku i wpisz `100;` w bloku kodu.

!

!

> 1. Zdefiniuj zakres od 0 do 1 z 50 podziałami, wpisując `0..1..#50` w węźle **Code Block**.
> 2. Połącz ten zakres z węzłem **Surface.PointAtParameter**, który pobiera wartości u i v z zakresu od 0 do 1 na powierzchni. Pamiętaj, aby zmienić skratowanie na Iloczyn wektorowy, klikając prawym przyciskiem myszy węzeł **Surface.PointAtParameter**.

W tym kroku użyjemy pierwszej funkcji do przesunięcia siatki punktów w górę na osi Z. Ta siatka będzie sterować generowaną powierzchnią na podstawie funkcji źródłowej. Dodaj nowe węzły, jak pokazano na ilustracji poniżej

!

> 1. Używamy węzła **Code Block** z wierszem: `(0..Math.Sin(x*360)..#50)*5;`. Krótkie objaśnienie: definiujemy zakres z formułą w jego wnętrzu. Ta formuła jest funkcją sinus. Funkcja sinus przyjmuje w dodatku Dynamo dane wejściowe w stopniach, więc aby uzyskać pełny kształt funkcji sinus, należy przemnożyć wartości x (jest to wejście zakresu od 0 do 1) przez 360. Następnie chcemy uzyskać taką samą liczbę podziałów, ile jest punktów siatki sterującej dla każdego wiersza, dlatego zdefiniujemy pięćdziesiąt podziałów podrzędnych za pomocą instrukcji #50. Na koniec: mnożnik 5 po prostu zwiększa amplitudę przekształcenia, dzięki czemu możemy zobaczyć efekt w podglądzie Dynamo.

!

> 1. Mimo że poprzedni węzeł **Code Block** działał dobrze, nie był całkowicie parametryczny. Chcemy dynamicznie sterować jego parametrami, dlatego zastąpimy wiersz z poprzedniego kroku wierszem `(0..Math.Sin(x*360*cycles)..#List.Count(x))*amp;`. Daje to możliwość zdefiniowania tych wartości na podstawie wejść.

Zmieniając suwaki (w zakresie od 0 do 10), otrzymujemy interesujące wyniki.

!

!

> 1. Transponując zakres liczb, odwrócimy kierunek fali kurtynowej: `transposeList = List.Transpose(sineList);`

!

> 1. Po dodaniu wartości sineList i transposeList uzyskujemy zniekształconą „jajowatą” powierzchnię: `eggShellList = sineList+transposeList;`

Zmienimy wartości suwaków określone poniżej, aby zmniejszyć zniekształcenia tworzone przez ten algorytm.

!

Na koniec zastosujmy zapytania do wyodrębnionych części danych za pomocą węzła Code Block. Aby ponownie wygenerować powierzchnię za pomocą określonego zakresu punktów, dodaj węzeł Code Block powyżej między węzłami **Geometry.Translate** i **NurbsSurface.ByPoints**. Będzie on zawierać wiersz tekstu: `sineStrips[0..15..1];`. Spowoduje to wybranie pierwszych 16 wierszy punktów (spośród 50). Po ponownym utworzeniu powierzchni widać, że wygenerowaliśmy wyodrębnioną część siatki punktów.

!

!

> 1. W ostatnim kroku, aby uczynić ten węzeł **Code Block** bardziej parametrycznym, będziemy sterować zapytaniem za pomocą suwaka o zakresie od 0 do 1. W tym celu dodamy ten wiersz kodu: `sineStrips[0..((List.Count(sineStrips)-1)*u)];`. Może to wydawać się skomplikowane, ale ten wiersz kodu pozwala szybko przeskalować długość listy do mnożnika z zakresu od 0 do 1.

Wartość `0.53` na suwaku powoduje utworzenie powierzchni tuż za punktem środkowym siatki.

!

Zgodnie z oczekiwaniami wartość `1` na suwaku tworzy powierzchnię z pełnej siatki punktów.

!

Przyglądając się wykresowi wizualnemu, możemy wyróżnić bloki kodu i przejrzeć ich poszczególne funkcje.

!

> 1\. Pierwszy węzeł **Code Block** zastępuje węzeł **Numer**.
>
> 2\. Drugi węzeł **Code Block** zastępuje węzeł **Number Range**.
>
> 3\. Trzeci węzeł **Code Block** zastępuje węzły **List.Transpose**, **List.Count** i **Number Range**.
>
> 4\. Czwarty węzeł **Code Block** stosuje zapytania do listy list, zastępując węzeł **List.GetItemAtIndex**.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://primer2.dynamobim.org/pl/8_coding_in_dynamo/8-1_code-blocks-and-design-script/3-shorthand.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
