Nowości w IDL 8.4

Funkcja ALOG2
Oblicza logarytm o podstawie 2 dla zmiennej wejściowej

Klasa BigInteger Klasa zmiennych, która pozwala na tworzenie i operacje na liczbach całkowitych o dowolnej wielkości. Użytkownik może użyć liczb klasy BigIntegers w wyrażeniach matematycznych w połączeniu z innymi licznami BigIntegers lub zwykłymi klasami liczb liczb. Klasa BigInteger posiada również wiele metod służących zmianom właściwości tych liczb.

Na przykład:

b = BigInteger(2)^1279 - 1
HELP, b
PRINT, '2^1279 - 1 is prime?', b.IsPrime() ? 'true' : 'false'
c = b.NextPrime()
PRINT, 'next prime is ', c - b, ' greater'
IDL prints:
B BIGINTEGER = 1.0407932194664400...x10^385
2^1279 - 1 is prime? true
next prime is 2056 greater


Zmienne BOOLEAN
Obecnie można tworzyć zmienne logiczne które zawierają tylko wartości 0 (fałsz) lub 1 (prawda). Zmienne te są aktualnie zmiennymi typu BYTE ze specjalnymi znacznikami logicznymi, tzw. flagami. Ponieważ zmienne te są liczbami typu BYTE, dlatego mogą być używane wszędzie tam, gdzie jest wykorzystywana zmienna BYTE. Wprowadzone zostały też dwie nowe zmienne systemowe !TRUE i !FALSE, które są zmiennymi logicznymi o wartościach odpowiednio 1 i 0. Znacznik (flaga) jest wykorzystywany przy drukowaniu informacji pomocy, podczas modyfikowania elementów tablicy logicznej i przy konwersji do/z JSON

Na przykład:

a = [0.0, 1.0, 0.0, 3.0]
b = BOOLEAN(a)
b[2] = "yes" ; equal to "true"
HELP, b
PRINT, b
PRINT, JSON_SERIALIZE(b)
IDL prints:
B BOOLEAN = Array[4]
0 1 1 1
[false,true,true,true]


Code Coverage
Aktualnie można analizować wykorzystanie kodu dla aplikacji poprzez użycie funkcji CODE_COVERAGE. Funkcja ta zwraca liczbę linii kodu wykonanego i niewykonanego dla zadanej przez użytkownika procedury. Dodatkowo funkcja ta została zintegrowana z Workbenchem. Możliwe jest uruchomienie funkcji bezpośrednio lub wyświetlenie statystyk wykorzystania kodu w Profiler View.

Folder Watching System
Nowy obiekt FOLDERWATCH, który monitoruje foldery do zmian i wywołuje zwrotnie zdefiniowane przez użytkownika, ilekroć nastąpi zmiana. Umożliwia to programistom IDL stworzyć batch client, który przegląda określony folder, a następnie wykonuje przetwarzanie, gdy określone warunki zostały spełnione (na przykład plik został dodany, zmodyfikowany lub usunięty z folderu).

; Get working directory
CD, CURRENT=c
f = FOLDERWATCH( c, 'MyCallback', /ADDED )


Widmo FFT (Fast Fourier Transform Power Spectrum)
Nowa funkcja FFT_POWERSPECTRUM oblicza transformatę Fourier’a dla dowolnej tablicy danych. Ponadto funkcja może zwrócić dodatkowe informacje tj. amplitudę, fazę i poziomy istotności związane z wynikiem.

Generowanie kodu w nowym okienku
Metoda Generate Code generuje kod potrzebny do odtworzenia zawartości okna graficznego. Metoda ta może być używana do generowania kodu po zmianach wprowadzonych interaktywnie w oknie graficznym, np. przeniesieniu, zmianie rozmiaru lub zmianie właściwości.

p = PLOT(/TEST, THICK=3, COLOR='red', LAYOUT=[2,1,1])
b = BARPLOT(/TEST, FILL_COLOR='green', LAYOUT=[2,1,2], /CURRENT) p.GenerateCode, 'mycode.pro'


Istnieje również opcja zapisania wszystkich danych wykorzystanych w wizualizacji w oknie graficznym, aby można było udostępniać wygenerowany kod.

Funkcje Lambda i procedury
Aktualnie możliwe jest tworzenie prostych wbudowanych procedur, które mogą być wykorzystane do programowania funkcjonalnego. Procedury Lambda mogą być wykorzystane z nowymi metodami ::Filter, ::Map oraz ::Reduce lub można je przywołać jako samodzielne funkcje lub procedury.

; Use Map to return the square root of a number
var = [0:5]
PRINT, var.Map(LAMBDA(n: sqrt(n)))
IDL prints:
0.000000 1.00000 1.41421 1.73205 2.00000 2.23607
Next use Lambda with the Filter method to return prime numbers:
var = [2:50]
lam = LAMBDA(n:n le 3 || MIN(n mod [2:FIX(SQRT(n))]))
newvar = var.Filter(lam)
PRINT, newvar
IDL prints:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
We can also make function calls directly on the returned Lambda variable:
compile_opt idl2
; Are these prime numbers?
PRINT, lam(499), lam(4999), lam(49999), lam(499999), lam(4999999)
IDL prints:
1 1 1 0 1


Zmienne atrybuty
Można uzyskać dostęp do nowych specjalnych atrybutów dla wszystkich zmiennych IDL.

Na przykład:

var = RANDOMU(seed, 200, 100)
PRINT, var.length
PRINT, var.ndim
PRINT, var.dim
PRINT, var.typecode
PRINT, var.typename
IDL prints:
20000
2
200 100
4
FLOAT


Atrybuty te umożliwiają wygodne stosowanie dla funkcji typu SIZE, N_ELEMENTS oraz TYPENAME oraz są szybsze w wywołaniu niż standardowe funkcje.

Metody statyczne dla zmiennych IDL
Użytkownik może przywołać specjalne metody statyczne dla wszystkich zmiennych IDL z wyjątkiem obiektów i struktur.

Na przykład:

var1 = RANDOMU(seed, 200, 100)
PRINT, var1.Mean()
PRINT, var1.Total()
var2 = var1.Sort()
HELP, var2
IDL prints:
0.501100
10022.0
VAR2 FLOAT = Array[20000]


Inny przykład użycia ciągu (stringu):

str = " IDL is Hard. "
if (str.Contains("hard", /FOLD_CASE)) then $
str = str.Replace("hard", "fun", /FOLD_CASE)
str = str.ToUpper()
str = str.Trim() ; remove leading/trailing whitespace
PRINT, str
IDL prints:
IDL IS FUN.


Inne wybrane funkcje, które zostały zaktualizowane:
  • Funkcja ARRAY_EQUAL ma nowe słowa kluczowe NOT_EQUAL i QUIET.
    Słowo kluczowe NOT_EQUAL odwraca znaczenie testu, co jest przydatne do sprawdzania czy tablica zawiera określoną wartość czy nie. Słowo kluczowe QUIET tłumi wszelkie błędy konwersji.
  • Właściwości wykresu błędów: dwie nowe właściwości ERRORBAR_LINESTYLE i ERRORBAR_THICK do kontrolowania stylu linii i jej grubości
  • Usuwanie i odzyskiwanie pliku – procedura FILE_DELETE posiada teraz opcję RECYCLE, która będzie wysyłać pliki do kosza systemu operacyjnego, a nie trwale je usuwać. Ten parametr jest dostępny tylko na platformach Windows.

Więcej informacji na temat nowości w pakiecie IDL 8.4 można znaleźć na stronie producenta.

Script logo