Ja używam prawie codziennie, ale trochę do innych rzeczy. Sprawdzam, czy kod można zoptymalizować i generuję prostą dokumentację. Przykład
//Opisz proszę ten kod, jest w języku GML:
//Zwraca listę drzwi w postaci ds_mpay
function scan_entrances(_doors,_list){
var _check = 0b_10000
for(i=0;i<5;i++)
{
if _doors & _check > 0
{
ds_list_add(_list,i)
}
_check = _check >> 1
}
return _list
}
Rezultat:
Ten kod w języku GML definiuje funkcję o nazwie scan_entrances, która przyjmuje dwa argumenty: _doors i _list. Funkcja ta zwraca listę drzwi w postaci ds_list.
Poniżej znajduje się krótkie objaśnienie poszczególnych linii kodu:
var _check = 0b_10000 - tworzy zmienną _check i przypisuje do niej wartość binarną 0b_10000, czyli dziesiętnie 16. Ustawienie tej wartości pozwala na porównanie poszczególnych bitów zmiennej _doors.
for(i=0;i<5;i++) - rozpoczyna pętlę, która wykona się pięć razy.
if _doors & _check > 0 - sprawdza, czy wartość zmiennej _doors po AND z _check daje wynik większy niż 0. Wykorzystanie operatora AND (&) pozwala na porównanie poszczególnych bitów. Jeśli wynik jest większy niż 0, to oznacza, że bit dla aktualnie sprawdzanego drzwi jest ustawiony na wartość 1.
ds_list_add(_list,i) - jeśli warunek w linii 3 jest spełniony, to dodaje wartość i do listy _list. Wartość ta oznacza indeks drzwi, które są otwarte.
_check = _check >> 1 - po każdej iteracji pętli przesuwa wartość _check o jeden bit w prawo. Dzięki temu następna iteracja pętli porówna kolejny bit w zmiennej _doors.
return _list - zwraca listę _list, zawierającą indeksy otwartych drzwi.
Podsumowując, funkcja scan_entrances służy do skanowania zmiennej _doors, która przechowuje informacje o stanie otwarcia pięciu drzwi. Funkcja zwraca listę zawierającą indeksy drzwi, które są otwarte.