Sintassi

Gli script di pTabs seguono le regole sintattiche del linguaggio Ruby [1].

  • I comandi sono case sensitive, quindi vanno scritti con i corretti caratteri maiuscoli e minuscoli. [2]

  • La virgola separa gli argomenti di un metodo o funzione.

  • Le stringhe di testo sono definite racchiudendo il testo tra virgolette singole o doppie.

  • All’interno di una stringa delimitata da doppie virgolette, #{nome_variabile} inserisce il contenuto della variabile nel testo (string interpolation).

    1
     title "Tab. 25.#{index}."
    
  • All’interno di una stringa \n manda a capo il testo seguente.

  • Un’istruzione può essere mandata a capo purchè sia chiaro dal contesto che l’istruzione non è terminata. In genere viene mandata a capo dopo una virgola. Una stringa di testo non può essere semplicemente interrotta e mandata a capo, bisogna dividere la stringa e concatenarla con il carattere +.

    1
    2
    3
     ord :d20,
         "Tab. 20. Dia un giudizio complessivo del prodotto testato. "+
         "Utilizzi un voto da 1 a 10 per esprimere il suo giudizio."
    
  • Due numeri uniti da due punti .. rappresentano un range, una sequenza numerica: 1..10.

  • I caratteri preceduti da due punti : sono chiamati simboli (:q1). Ciascun simbolo viene istanziato una volta sola indipendentemente dal numero di chiamate. In pTabs si usiamo soprattutto per i nomi di parametri e per i nomi di variabili. Se però il nome della variabile contiene un punto, bisogna usare una stringa.

    1
    2
     md s(:d7_,2..12)
     md s('d7.',2..12)
    
  • Le parentesi tonde racchiudono gli argomenti di un metodo o funzione. Se il contesto non è ambiguo o se non si concatena direttamente un metodo sulla stessa funzione, si possono tralasciare.

    1
    2
    3
    4
    5
     vars s :d6_,10
     vars s(:d7_,4), s(:d7_,7..11)
    
     report.save :r
     report.save(:r).print
    
  • Le parentesi quadre racchiudono gli array (vettori). In pTabs quando un array costituisce l’unico argomento di una funzione, si possono tralasciare.

    1
    2
    3
    4
    5
     ord [d5, :r5], "Titolo tabella"   # gli argomenti di ord sono due, l'array delle variabili e il titolo,
                                       # senza parentesi diventerebbero tre argomenti distinti
     ord :d5 do
       w nil, -10, -5, 5, 10           # la sequenza di valori è un array, ma essendo l'unico argomento
     end                               # la funzione w li interpreta correttamente anche senza parentesi
    
  • L’operatore => viene usato per associare la chiave di un hash (array associativo) al suo valore. In pTabs vengono utilizzati per specificare delle opzioni oppure per associare dei valori alle variabili:

    1
    2
    3
     show_missing :out => "report_na"
    
     select :d1 => [1,2], :sesso => 1
    

    Una sintassi alternativa più semplice, ma che può essere utilizzata solo quando la chiave dell’hash è un simbolo, consiste nell’utilizzare il carattere di duepunti dopo il simbolo, seguito dal valore:

    1
    2
    3
     show_missing out:"report_na"
    
     select d1: [1,2], sesso: 1
    
  • A un metodo o funzione, oltre agli argomenti può essere passato un blocco. Un blocco è una porzione di codice (una funzione anonima, una closure) che viene eseguito nel contesto definito dall’oggetto a cui viene passato il blocco. In pTabs tutto il report è definito come blocco e anche le tabelle utilizzano un blocco quando occorre specificare maggiori parametri oltre alle variabili e al titolo. Un blocco utilizza la sintassi do ... end. [3] Lo stesso blocco può avere degli argomenti: do |args| ... end.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
     # i metodi sort e first agiscono sulla tabella che si sta definendo
     md s(:d7_, 10) do
       sort :d
       first 3
     end
    
     # rep cicla su ciascuna variabile della sequenza e nel contempo rende disponibile a ogni ciclo
     # il nome e l'indice della variabile
     # (var e index sono nomi arbitrari, potremmo per esempio chiamarli v e i)
     s(:q25_,1..10).rep do |var, index|
       ord var, title "25.#{index}. Giudizio riguardo:\n$var_label()"
     end
    

Note

[1]Lo script è effettivamente codice Ruby che viene interpretato da ruby.exe.
[2]Comunque, al momento, tutti i comandi sono in minuscolo.
[3]I blocchi in Ruby possono utilizzare anche la sintassi { |args| ... }. Per convenzione questa sintassi è utilizzata quando il blocco è di una sola riga.