Questão: Qual é o escopo de uma variável não declarada? \linebreak
Supondo escopo estático (léxico)
- Quando acessamos uma variável
x
, como saber se ela é local, global ou algo entre os dois (c/ escopo aninhado)?
Ruby tem dois níveis de escopo (local e global)
- Distinção usando prefixos
- foo é local
- $foo é global
- @foo é um atributo de instância
- @@foo é um atributo de classe
\pause Python, R
- Regra interessante \linebreak → tudo é local, a menos que especificado o contrário
Declaração de tipos é desnecessária
- Checagem de tipos feita dinamicamente
- Algumas linguagens são mais estritas \linebreak → Scheme, Python, Ruby
- \pause Outras menos (Perl, Javascript, Rexx, Tcl)
Perl
- Assume que o programador codifica erros importantes
- Na ausência de checagem → comportamento razoável
$a[3] = "1"; print $a[3] + $a[4], "\n";
Declaração de classes são executáveis (Python, Ruby)
- Compilação condicional
\pause Exemplo com código em Ruby
class My_class
def initialize(a, b)
@a = a; @b = b;
end
if expensive_function()
def get()
return @a
end
else
def get()
return @b
end
end
end
Como aprender a programar?
- Linguagem de script versus linguagem de sistema
Ronald P. Loui (Washington University)
- In Praise of Scripting: Real Programming Pragmatism
Qual linguagem de script para ensinar a programar?
- Gawk
- Javascript
- PHP
- ASP
- Perl
- Python (Raspberry Pi)
- Ruby
E sobre a escalabilidade de linguagens de script?
Linguagens de script versus Linguagens de sistema
- Qual é melhor?
\pause A discussão balança entre
- Expressividade/flexibilidade vs segurança e desempenho
- \pause Rápido e sujo vs aplicações polidas
\pause Richard Gabriel (Lucid Corp., 1989)
- http://dreamsongs.com/worseisbetter.html
- Por que Unix e C tem tanto sucesso quando comparado a Common Lisp?