O Smalltalk tem muitas Classes básicas úteis e que estão presentes no Squeak-Etoys do micro OLPC. Nas próximas lições vamos ver um resumo das mais importantes.
Nessa lição, e na próxima, vamos aprender sobre duas Classes do grupo chamado: coleções. Veremos detalhes sobre duas coleções: String e Ordered Collection.
Não apresentaremos todos os métodos de cada Classe. Apenas os mais importantes. E, para cada método, vamos apresentar um mini-exercício que você pode reproduzir, usando o Workspace e o Transcript, como já mostramos.
Para criar um objeto da Classe String você precisa apenas assinalar um grupo de caracteres para uma variável. Qualquer coisa assim:
|a|
a := 'abcdef'.
e teremos o objeto de String: a.
Esse objeto pode chamar vários métodos. Nós apresentaremos primeiro um operador muito útil (mas pouco visível por ser muito pequeno).
,
Deu para ver? A vírgula é um operador para concatenar dois Strings.
Exemplo
| a | a:='abcdef'. Transcript show: a,'xxx'
Resultado
abcdefxxx
Retorna a quantidade de dígitos do String.
Exemplo
| a | a:='abcdef'. Transcript show: a size.
Resultado
6
Cada símbolo: \ é tratado como um "carriage return".
Exemplo
| a | a:='ab\cde\f'. Transcript show: a withCRs.
Resultado
ab cde f
Retorna o caractere da posição n.
OBSERVAÇÃO: Repare abaixo como escrevemos um método (Transcript show) tendo um parâmetro que é uma operação com outro método tendo parâmetro. Usamos parêntesis e a ação dentro deles roda primeiro:
Exemplo
| a | a:='abcdef'. Transcript show:(a at: 2) .
Resultado
b
Retorna a posição do primeiro caractere do substring x.
IMPORTANTE: A primeira posição é 1 (não ZERO como em certas linguagens).
Exemplo
| a | a:='abcxxdbc'. Transcript show: ( a findString: 'bc') .
Resultado
2
Retorna a posição do primeiro caractere do substring x começando de determinada posição e considerando maiúsculas e minúsculas ou não.
Exemplo
| a | a:='abcxxdBC'. Transcript show: ( a findString: 'BC 'startingAt: 1 caseSensitive: true) .
Resultado
0
OBSERVAÇÃO: O resultado foi ZERO porque nós fizemos um erro proposital e o string é 'BC ' (tendo um branco)
e nós não temos esse grupo de letras no objeto. Mude para : 'BC' e refaça seu teste.
asUppercase
Muda todas as letras para maiúsculas.
Exemplo
| a | a:='abcdef'. Transcript show: a asUppercase.
Resultado
ABCDEF
Esse método é muito importante! Ele é chamado "split" em algumas linguagens. Nós usamos o "separador" s dentro de um grupo de substrings e esse método divide o string total em muitas partes colocando essas partes como elementos de uma orderedColletion. Vamos falar de orderedColletion na próxima lição. Essa Classe tem o método at: para pegar o substring em determinado índice. Olhe e teste o exemplo para entender melhor.
DICA: Nós usamos esse "truque" para desconstruir mensagens mandadas como um String pela internet ou para simular um registro de arquivo com vários campos.
Exemplo
| a ordCol | a:='ab@cd@ef'. ordCol:= a findBetweenSubStrs: '@'. "retorna orderedCollection" Transcript show: (ordCol at: 2) .
Resultado
cd
É um teste que retorna true se o String começa com x.
Exemplo
| a | a:='abcdef'. Transcript show: ( a beginsWith:'d').
Resultado
false
Outro teste que retorna true se o String tem os mesmos caracteres (não testa maiúsculas/minúsculas) que o string.
Exemplo
| a | a:='abcdef'. Transcript show: ( a caseInsensitiveLessOrEqual:'aBCdEf').
Resultado
true
Muda todas as letras para minúsculas
Exemplo
| a | a :='ABCdef'. Transcript show: a asLowercase.
Resultado
abcdef
Passa o primeiro caractere do String para maiúscula.
Exemplo
| a | a:='abcdef'. Transcript show: a capitalized .
Resultado
Abcdef
O String é cercado por apóstrofos.
Exemplo
| a | a:='abcdef'. Transcript show: a surroundedBySingleQuotes .
Resultado
'abcdef'
Se temos mais que um "branco" entre caracteres esse intervalo passa a ter só um.
Exemplo
| a | a:='ab cde f'. Transcript show: a withSeparatorsCompacted .
Resultado
'ab cde f'
Método muito importante! Podemos substituir um dígito ou mais , em qualquer lugar.
Exemplo
| a | a:='abcdef'. Transcript show: (a replaceFrom: 2 to: 2 with: 'X' startingAt: 1)
Resultado
aXcdef
Retorna um String redividido de maneira que nenhuma linha tenha mais que certa quantidade de caracteres.
Exemplo
| a | a:='This example is very simple.'. Transcript show: ( a withNoLineLongerThan:10)
Resultado
This example is very simple.
Substitui todos os'x' por 'y'
Exemplo
|a| a:='abcdef'. Transcript show: ( a copyReplaceAll: 'c' with:'X').
Resultado
abXdef
É possível converter um objeto (que não é String) em string usando: asString. Isso é usado, por exemplo quando se captura o conteúdo de um TextField. Vamos ver isso no futuro.
LIÇÃO ANTERIOR PRÓXIMA LIÇÃO