Blog

Wprowadzenie do Typscript: deklaracje zmiennych

Krótkie wprowadzenie do Typescript, którym będziemy się posługiwać w przypadku Office Scripts dla Excel.

Wprowadzenie do Typscript: deklaracje zmiennych

Ciężko mi było się zebrać do tego tekstu, więc dzisiaj bez zbędnego lukru w postaci przydługaśnego wstępniaka, ponieważ pora najwyższa odbębnić ten temat i zająć się ciekawszymi - z mojej perspektywy - zagadnieniami.

Zanim jednak przejdziemy do omówienie samego Typescriptu (dalej TSC) muszę poczynić pewną szalenie istotną uwagę. Otóż jeśli znasz lepiej lub gorzej Javascript (dalej JS) i chciałbyś przy tym zautomatyzować swoją pracę wykorzystując Excela, a ściślej narzędzie Office Scripts, to w żadnej mierze nie nie musisz przedzierać się przez tajniki TS, ponieważ znajomość JS w zupełności do tego wystarczy. Z resztą TSC zazwyczaj koniec końców podlega translacji - o czym za chwilę - do JS. Czemu więc zawracać sobie tym pierwszym językiem głowę w ogóle lub chociaż w kontekście Office Scripts? Są ku temu przynajmniej dwa powody. Po pierwsze, TS oferuje pewne rozwiązania, które zapewniają większą kontrolę nad tworzonym kodem, o czym szerzej napiszę za chwilę. Po wtóre, jak można przeczytać na stronie Microsoftu “Rejestrator akcji” dostępny dla Office Scripts generuje kod zgodny z TSC i dlatego też wszystkie przykłady z dokumentacji są właśnie tak spreparowane (trzeba jednak dodać, że w wielu przypadkach jest to zupełnie nie do wychwycenia).

No dobra to czym jest w ogóle ten TSC? Otóż w tym przypadku mamy do czynienia z językiem programowania, który ujrzał światło dzienny w 2012 roku i jest rozwijany pod egidą Microsoftu. Zazwyczaj przy tej okazji można również przeczytać, że jest to “tylko” pewien nadzbiór dla JS, ponieważ w praktyce (w produkcyjnych zastosowaniach) TSC jest zawsze transkompilowany do tego ostatniego. Czyli bardziej po ludzku pisząc: przy pomocy gotowych narzędzi dostarczonych przez Microsoft dochodzi do przekształcenie kodu źródłowego napisanego w TSC na odpowiednie instrukcje zgodne ze jakąś wersją JS. Po cholerę więc ta cała zabawa, można się zapytać?

Otóż JS jest dość specyficznym językiem programowania, który wiele wybacza programiście, co jednak nie zawsze wychodzi na dobre. Sam osobiście uważam, że część przyjętych w JS rozwiązań jest po prostu dziwaczna czy może bardziej koncyliacyjnie sprawę stawiając: pewne funkcjonalności w nim zaimplementowane różnią się zdecydowanie od “standardowego” podejścia znanego z innych języków. Tym niemniej nie tylko o “oryginalne” podejście idzie, bo to jeszcze dałoby się przeżyć. Po prostu pewne rzeczy sprawiają, że w JS źle się programuje, zwłaszcza jeśli mówimy o dużych projektach, gdzie ilość kodu liczona jest w tysiącach czy dziesiątkach tysięcy wierszy, nad którym pracuje więcej niż jedna osoba. Oczywiście JS stale ewoluuje i pewne z tych “trudności” są usuwane, ale ze względu na pewną filozofię rozwoju tego języka, zapewne pewne elementy nie mogą być zastąpione innymi rozwiązaniami.

TSC od samego początku był właśnie próbą - jedną z kilku przynajmniej - na zaadresowanie tych wyzwań, a tym samym w swoich założeniach miał zapewnić możliwość generowania bardziej przewidywalnego - a przez to bezpieczniejszego - kodu. Z perspektywy czasu można chyba stwierdzić, iż ta sztuka się udała, ponieważ TSC cieszy się coraz większą popularnością oraz zakresem zastosowań.

DEKLAROWANIE ZMIENNYCH I STAŁYCH

Za najważniejszą cechę TSC w kontrze do JS wymienia się statyczne typowanie, czyli w przypadku tego pierwszego języka to zmienna jest nośnikiem informacji o typie danych, które mogą być do niej przypisane. Innymi słowy: jeśli wskażemy, że zmienna X ma być typu tekstowego, wówczas kompilator będzie pilnował, czy nie próbowaliśmy do niej później przypisać na przykład liczby. Jeśli okaże się, że nie byliśmy w tym konsekwentni wówczas podczas transkompilacji otrzymamy informację o błędzie przypisania, choć sama kompilacja będzie prowadzona dalej i powstanie kod wynikowy w JS.

Do deklarowania stałych (zmiennych niemodyfikowalnych) używamy słowa kluczowego const, zaś w przypadku zmiennych wykorzystujemy słowo kluczowe let. W przypadku zmiennych można używać również var (od variable), ale sugerowałbym zapomnieć o tej możliwości. Ogólny schemat deklaracji zmiennej wygląda następująco:

let nazwa_zmiennej: typ

Jeśli chodzi o zasady tworzenie nazwy zmiennej to może nim być dowolne słowo, choć należy pamiętać, że zmienna musi zaczynać się od litery lub znaku podkreślenia “_”, ale później można już tworzyć dowolne zbitki składające się z ciągu liter, cyfr oraz znaków podkreślenia bądź dolara ($). Przy czym jako nazw zmiennych nie można używać słów kluczowych (let, const, if i tak dalej) oraz trzeba mieć na uwadze, że wielkość liter ma znaczenie i tym samym myVar oraz myvar to różne zmienne.

Podobnie jak w JS zmienną można zainicjować w miejscu deklaracji, tym samym przypisując jej od razu przy pomocy operatora “=” jakąś wartość. Jeśli tego nie zrobimy od razu, wówczas należy pamiętać, że przed pierwszym użyciem zmiennej w naszym programie musimy wcześniej dokonać przypisania wartości, ponieważ próba jej odczytania zostanie potraktowana jako błąd kompilacji (dzieje się to inaczej niż w JS, gdzie zmienna domyślnie ma wartość undefined). W rezultacie możemy mieć do czynienia z trzema przypadkami takich deklaracji:

I. let moja_zmienna: number

moja_zmienna = 666

II. let moja_zmienna: number = 666

III. let moja_zmienna = 666

W pierwszym przypadku mamy do czynienia z sytuacją, gdy najpierw deklarujemy zmienną o nazwie “moja_zmienna” i dopiero później przypisujemy do niej wartość odpowiedniego typu. W drugim scenariuszu deklaracja i przypisanie realizowane są w jednym kroku i tak samo dzieje się to w trzecim przypadku. Chciałbym jednak zwrócić uwagę, że w tej ostatniej sytuacji nie wskazujemy jawnie typu danych, natomiast kompilator w tym przypadku nie będzie miał problemu z jego rozpoznaniem na podstawie przypisywanej wartości.

Na dzisiaj to byłoby wszystko, zaś w kolejnym wpisie poznany dostępne w TSC typy danych (część z nich), operatory i kto wie, może uda się nam zahaczyć o funkcje.