Submitted by jeswiat on Sat, 2013-08-10 21:34
- Jedną z cech kompilatora Framscript, która utrudnia uruchamianie programów, jest brak komunikatu błędu przy napotkaniu operatora „=” w warunku w „if”, np.
„if (a+b=c) ...”
Wygląda to na instrukcję bezsensowną (a przynajmniej ja się nie domyślam, co to miałoby znaczyć).
Błąd ten jest nie tylko niebezpieczny, ale i łatwy do popełnienia, ponieważ w wielu innych językach stosuje się „=” zamiast „==”.
Czy jest możliwość włączenia przynajmniej ostrzeżeń w kompilatorze dla takich sytuacji ? - Z tego, co czytałem o Framscript, to parametry mogą być przekazywane raczej tylko przez wartość i dlatego np. aby zmienić wartość zmiennej przy użyciu osobnego podprogramu, należy użyć operatora „=”, np.:
Creature.user1 = ZmianaWartosciZmiennej( Creature.user1, RodzajZmiany ) ;
zamiast wygodniejszego i bezpieczniejszego zapisu:
ZmianaWartosciZmiennej( Creature.user1, RodzajZmiany ) ;Czy istnieje możliwość stosowania parametrów innych, niż „przez wartość”, a więc przez to używania tego drugiego rodzaju zapisu ?
- Aby zmienić tylko jakiś fragment zmiennej typu String (na wartość o tej samej długości) trzeba ją parokrotnie kopiować.
Czy jest lepsza metoda ? – np. coś w rodzaju:
String.substr(...), ale po lewej stronie „=”
czy String.replace(...) ale z podaniem numeru znaku, od którego będzie wpisana nowa wartość?
Rzeczywiście, takie
Przykładowe
if (a+b=c) ...
mimo że wygląda bezsensownie, jest poprawne składniowo (inaczej nie byłoby tego kłopotu bo by się nie kompilowało), i jest równoznaczne zif (a+(b=c)) ...
, co odpowiadab=c; if ((a+b)!=0) ...
&
który trochę to ułatwia, niedogodnością jest konieczność jawnego sięgania do pola.value
- ale przynajmniej od strony wywołania zapis jest o wiele wygodniejszy niż pobieranie zwracanej wartości (zwłaszcza jeżeli tych wartości miałoby być kilka naraz):