Pytania nt. Framscript 
  1. 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 ?
  2. 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 ?

  3. 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ść?
Szymon Ulatowski's picture

  1. Rzeczywiście, takie ostrzeżenie byłoby pożyteczne, zobaczymy co da się zrobić.
    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 z if (a+(b=c)) ..., co odpowiada b=c; if ((a+b)!=0) ...
  2. Istnieje operator & 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):
    function razyTrzy(x) {x.value+=x.value+x.value;}
    var zmienna="ha";
    razyTrzy(&zmienna); //zmienna=="hahaha"
    
  3. Nie ma lepszej metody, ale można sobie zdefiniować funkcję do której string trafiałby jako referencja.