Jump to content

Welcome to Smart Home Forum by FIBARO

Dear Guest,

 

as you can notice parts of Smart Home Forum by FIBARO is not available for you. You have to register in order to view all content and post in our community. Don't worry! Registration is a simple free process that requires minimal information for you to sign up. Become a part of of Smart Home Forum by FIBARO by creating an account.

 

As a member you can:

  •     Start new topics and reply to others
  •     Follow topics and users to get email updates
  •     Get your own profile page and make new friends
  •     Send personal messages
  •     ... and learn a lot about our system!

 

Regards,

Smart Home Forum by FIBARO Team


  • 0

Funkcje: Poradnik


Guest vandi

Question

Guest vandi

Temat który powinien być, a poruszony a do tej pory nie został.

Funkcje

Wikipedia funkcję definiuje tak:

Podprogram (inaczej funkcja lub procedura) - termin związany z 

Please login or register to see this link.

. Podprogram to wydzielona część 

Please login or register to see this link.

 wykonująca jakieś operacje. Podprogramy stosuje się, aby uprościć program główny i zwiększyć czytelność kodu.

 

Pełną listę instrukcji, którą programiści z Fibaro zaimplementowali w HC2 można znaleźć chociażby tu: 

Please login or register to see this link.

Wszyscy tych funkcji używamy na co dzień. W każdym kodzie. Lepiej lub gorzej ale potrafimy z nich korzystać.

Jednak nie wszyscy potrafimy tworzyć funkcji nowych. Spersonalizowanych.

Zapytacie po co? 

Zacytuję Wikipedię: "Po to aby uprościć program główny i zwiększyć czytelność kodu"...

ale i po to, aby przyspieszyć pisanie samego kodu, czy chociażby po to, aby robić mniej" literówek" w kodzie.

 

Tu chciałby zaznaczyć, że nie jestem programistą. To taki człowiek powinien temat otworzyć i to napisać... Ale nie otworzył. I nie napisał :)  A ktoś przecież powinien.

Ludzi którzy chcą się uczyć ( takich jak np. ja :P ) jest wielu i skądś to wiedzę chcą zdobyć. Patrząc wstecz na własne doświadczenia i trudności ze znalezieniem wiedzy w języku naszych pradziadów :)  uważam ze trzeba im pomóc.  I to jest powód dla którego postanowiłem otworzyć ten temat. 

 

Więc..

Pora na pierwszą funkcję. Na razie bez argumentów.

Please login or register to see this code.

Funkcje podobnie jak zmienne w większości wypadków definiuje się i  umieszcza się na samym początku skryptu.

Pisząc skrypt/ scenę/program ,  taką funkcję można później  w kodzie wywołać:

pierwszaFunkcja()

W oknie debugera pojawi nam się napis-->>  świat jest piękny.

Taka funkcja w zasadzie jest mało użyteczna.  Potrzebne są argumenty, czyli coś co przekażemy do funkcji.

Argumenty wpisujemy wywołując funkcję wstawiając je między nawiasy. 

Zdefiniujmy funkcję:

Please login or register to see this code.

 a przy wywołaniu  wstawmy argumenty, tu dane ze zmiennej:

funkcjaDruga(dane)

okno debugera -->> Ala ma kota
 

Inny przykład funkcji która nie posiada żadnych argumentów.

Rozwinięcie funkcji pierwszej:

Please login or register to see this code.

wywołajmy: 

funkcjaTrzecia() 

okno debuggera  -->> 100, 200, 13:21

Zauważcie, że nic nie wstawiłem między nawiasami. Funkcja wstawiła dane ze zmiennych zdefiniowanych  wcześniej.

 

I teraz czas na wisienkę na torcie.

Ta sama funkcja przygotowana do podstawiana danych.

Please login or register to see this code.

No i wywołajmy funkcję czwartą:

funkcjaCzwarta('100',  '200' , czasAktualny)

okno debuggera  -->> 100, 200, 13:21

 

Wywołując funkcję wstawiłem argumenty:( '100',  '200' , czasAktualny ).

W zdefiniowanej funkcji znajdziemy a, b, c.

W momencie wstawiania a przyjmuje wartość 100, b - wartość 200, c - czasAktualny.

I tu tkwi potęga funkcji. To jest to, co bardzo upraszcza kod programu. Definiujemy funkcję raz, a potem ją wywołujemy  ile chcemy, podstawiając tylko inne dane.

 

Zmieńmy dane wejściowe funkcji:

Please login or register to see this code.

Wywołajmy tą samą funkcję:

funkcjaczwarta( blondi, rude, tesciowa)

okno -->> kocham blondynki rude też są fajne nie cierpię teściowej

 

Inny przykład:

Please login or register to see this code.

Wywołajmy:
funkcjaCzwarta(lampaOgrod, wartoscZmiennejGlobalnej, 'alaMaKota')

 

 

Wszystko co dzieje się wewnątrz funkcji jest niewidoczne dla reszty skryptu. Czyli  inaczej, nie można używać zmiennych utworzonych lub zmienionych  w ciele funkcji, poza nią.

Jeżeli chcemy aby funkcja zwróciła nam jakąś wartość, należy posłużyć się funkcją return.

Please login or register to see this code.

W przykładzie powyższym w momencie kiedy zostaną spełnione warunki zwracana jest  wartość true

wywołujemy:

if deszczowo() then

print(' funkcja zwróciła wartość true')

end

p.s możemy ale nie musimy wpisywać if deszczowo() == true. 

lub

if deszczowo() == false  then 

print ('funkcja nie zwróciła wartości true. Można włączyć nawadnianie') 

end

 

Funkcje za pomocą instrukcji return mogą zwracać wartości, ale również i całe funkcje. 

Posłużę się tu przykładem. Jedną z moich ulubionych, aczkolwiek bardzo prostych funkcji:

Please login or register to see this code.

Wywołajmy:

on(wyrzutniaRakietD)

Funkcja on nie zrobi nic innego jak zwróci funkcję którą bardzo dobrze znamy, czyli po prostu uruchomi wyrzutnię rakiet.

Oczywiście funkcję taką można rozwinąć:

Please login or register to see this code.

W tym przypadku funkcja on  zanim wyśle rozkaz do wyrzutni , sprawdzi czy jest ona wyłączona.

 

Proste funkcje które napisaliśmy, a których nie będziemy korygować, żeby nie zaciemniały reszty programu, można sformatować do jednej linijki kodu. Przy okazji wstawiając inną, na przykład analogicznie działającą funkcję off.

Please login or register to see this code.

 

Instrukcja return nie musi nic zwracać. Można jej użyć aby  przerwać działanie funkcji:.

Przykład:

Please login or register to see this code.

wlaczAlarm(syrena)

Ponieważ zmienna czujnikRuchu nie ma wartości, wywołana funkcja po napotkaniu warunku if not czujnikRuchu  z funkcji wychodzi.

 

Tą funkcję można też napisać inaczej. Prościej:

Please login or register to see this code.

 

Lub jeszcze prościej . Korzystając z  funkcji on i funkcji  gV  którą zastąpiłem funkcję tonumber(fibaro:getValue(urzadzenie, 'value')).

Please login or register to see this code.

Ot taka mała sztuczka:

Po napisaniu skryptu  w HC2 zaznacz go całego (ctrl +a) , po czym wciśnij shift +Tab  

Skrypt zostanie sformatowany. Jeśli jest poprawnie napisany, wszystkie poziomy znajdą się na swoich miejscach. Tak jak na zdjęciu poniżej.

59eafeda28c92_Przechwytywaniewtrybiepenoekranowym21_10.2017094853.jpg.905546acd6601b101df1ddd929b9dca1.jpg

 

Jeśli natomiast zrobiliśmy błąd, na przykład wstawiliśmy o jedno end za dużo...

59eafeda7e090_Przechwytywaniewtrybiepenoekranowym21_10.2017100027.jpg.e5691ce318030ab693ee6baac5b78c2b.jpg

Wciśnięcie klawiszy pomoże nam ten błąd znaleźć. --> Nie wszystko poniżej błędu  zostało poprawnie sformatowane.

Potestuj. Warto

 

 

P.s.

Please login or register to see this code.

przeczytaj()
przeczytaj(kom)
przeczytaj(_false)

 

Edited by vandi
Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...