« first day (93 days earlier)      last day (3691 days later) » 

3:14 PM
Gente, estão doutrinando o @Piovezan. Viu como saem coisas bacanas entre participantes de alto nível?
 
 
1 hour later…
4:25 PM
@TiagoCésarOliveira Você assume coisas demais. Tome cuidado para não ser "doutrinado" também.
 
5:01 PM
Alozes
 
E aí André.
 
Como vais?
 
Tudo jóia. Sabadão tranquilo.
 
@Piovezan Sortudo
Só entrei aqui porque estou pausando pra almoçar...
Hoje tenho uma meta
 
Entendi. C#?
 
5:03 PM
Aprender Knockout.Js, Bootstrap e outras coisas realacionadas a SPA pra tentar colocar um site no ar até o fim da tarde
 
Ah tá.
 
C# e Html5 e afins
Se eu não cumprir essa meta, ainda vou tentar de novo sem o bootstrap
 
O que seria SPA?
 
Single Page Application
Estou com uma ideia (que pra mim é) genial
Se eu conseguir subir até o fim da tarde, passo o link do resultado aqui xD
Senão eu mostro pro pessoal na segunda, porque quero que especialmente o Cigano veja meu progresso
 
Hm. Não conheço nada dessas tecnologias. Só sei que Bootstrap permite criar grid layouts.
 
5:06 PM
@Piovezan Se quiser eu dou uma brief explicação
 
Diz aí.
 
Bem... a melhor explicação pro SPA é o GMail. Tem UX melhor que o dele?
 
É, Gmail é bacana.
Ajax de tudo quanto é lado.
 
Então, o Knockout.js é uma biblioteca em Javascript pra MVVM, que ajuda bastante no desenvolvimento de SPAs
Isso... SPAs usam AJAX no lugar de qualquer refresh / page load
 
Para parecer um desktop, imagino.
 
5:08 PM
Mais ou menos
O site que vou fazer essa tarde tem algumas semelhanças com um blog, então é bem simples
Mas mais tarde será integrado com um e-commerce
 
E essas tecnologias, dá pra aprender o necessário em uma tarde?
 
@Piovezan Eu já pokei uns materiais delas há um tempo atrás
Então eu conheço a ideia por trás delas, mas não sei como aplicá-las
É isso que vou estudar
 
Entendi.
Fala aí das properties do C#. :)
Se estiver com tempo, claro.
 
5:24 PM
Vejamos...
Elas são abstrações pro encapsulamento
Que podem ser só uma mudança de sintaxe ou uma grande abstração
Por exemplo, um encapsulamento sem properties seria algo do tipo
private string _nome;
public string getNome() {
  return _nome;
}
public void setNome(string nome) {
  _nome = nome;
}
Com properties, poderia ser feito assim:
private string _nome;
public string Nome {
  get { return _nome; }
  set { _nome = value; }
}
E, no caso, Nome é usado como se fosse um campo comum, do tipo this.Nome = "João"
Soa mais natural, mas nesse caso é só uma mudança de sintaxe
A vantagem de properties são as auto-implemented properties, ideais no caso de propriedades como essa:
public string Nome { get; set; }
Ou seja... no final, são só mais uma abstração pra tornar o código mais elegante
Outra coisa que se podem fazer com properties são indexers
Não lembro exatamente a sintaxe, mas seria algo do tipo
public object this[int x] {
  get { return _arrayEscondida[x]; }
  set { _arrayEscondida[x] = value; }
}
Isso permite usar sua classe como se fosse um array
Ou hash table, e afins
 
Acho que entendi.
Tem properties em Objective-C também, só não sei se dá pra fazer indexers nele.
*nela
 
@Piovezan Tive pouco contato com Obj-C... um amigo meu fez um curso, o que eu sei é só o que ele me falou
 
Os get e set explícitos foram só para exemplo, ou é necessário fazê-los?
 
@Piovezan Precisa, porque você pode não ter um set se quiser
(Também pode não ter o get, mas não imagino um caso real em que alguém teria isso)
 
Duas coisas que achei interessantes do Obj-C (também só estudei ele por cima):
uma construção que não lembro o nome mas é basicamente passar uma função anônima para os métodos (acho que o nome é block, não sei)
e nomes de métodos poderem ser quebrados com parâmetros entre um pedaço e outro
por exemplo: copiarLista[a: List]paraLista[b: List]
Cheguei a sentir falta dessa nomenclatura de método em umas duas ou três situações já.
 
6:25 PM
Desculpa a demora, voltei
Então
O C# tem os dois, mais ou menos
O primeiro se chama Higher-Order Function e é um conceito de programação funcional
Que é o que quem conhece FP odeia no Java: HOFs são horríveis de se fazer no Java
O C# usa MUITO as Higher Order Functions no LINQ, a biblioteca de tratamento de sequências dele
Do tipo, pra filtrar e ordenar uma lista, ao invés de fazer um monte de foreachs e ifs pra remover os itens indesejados e aplicar a ordem, você usa essas funções:
minhaListaDePessoas
  .Where(pessoa => pessoa.Idade >= 18) // Filtra por pessoas maiores de idade
  .OrderBy(pessoa => pessoa.Nome) // Ordena por ordem alfabética pelo nome
Um detalhe pouco percebido no LINQ é que ele não gera Lists, ele gera IEnumerables, que são sequências preguiçosas...
 
a quais tipos de objetos se pode aplicar o LINQ?
 
@Piovezan Qualquer tipo de sequência
Uma lista de pessoas, uma lista de apartamentos, uma array contendo seus funcionários... o que quiser
 
basicamente listas e arrays
maps?
 
@Piovezan É que o .Net tem IEnumerables, que são sequências preguiçosas, e o LINQ é formado por elas
No .Net, Listas e Arrays são IEnumerables
Então se aplica a elas também
 
Esse conceito do LINQ é interessante. Começou no C# ou foi pego de algum outro lugar?
 
6:32 PM
Maps no .Net são Dictionarys, que não passam de um enfeite pra KeyValuePairs enumeráveis, então eles também obedecem o LINQ
@Piovezan Foi pego de programação funcional, e colocaram nomes de SQL
 
então sets, e tudo mais que no Java seria collection, funciona no LINQ.
 
@Piovezan Exatamente
 
Interessante isso.
 
@Piovezan uma doutrinação não é algo em essência ruim :)
Boa tarde povo
@AndreLeria, bootstrap é bem fácil, vai ver
 
Na programação funcional existe map, fold e filter por exemplo... no LINQ se chamam Select, Aggregate e Where (nomes vindos do SQL)
@Piovezan Tudo de programação funcional é interessante. Não só interessante como eficiente, se souber aplicar...
Quando ao segundo ponto do Obj-C, que na verdade ele copiou do Message-passing Style do Smalltalk
O C# permite Overloads e Named Parameters
 
6:37 PM
@TiagoCésarOliveira Algumas doutrinações são bem ruins sim. Mas o ambiente pode ser considerado hostil para os doutrinadores, então deixa isso pra lá.
 
Dá, com uma gambiarra ou outra, pra fazer a mesma coisa com o C#. Mas não seria conveniente, os estilos não combinam
Uma vez eu fiz algo parecido
Eu tinha uma função que recebia uma sequência e adicionava ela pra uma DropDownList (acho que se chamam ComboBox no Java)
Eu chamava ela meio que AtualizarDDL(sequencia)
 
@Piovezan É como disse, meu caro: EM ESSÊNCIA não é uma coisa ruim. Mas entendo seu ponto, não fiquemos discutindo isso aqui. Tô prestando atenção na aula aí tb pq não conheço tanto de C#
 
Mas eu coloquei uns named parameters pra coisas que eu nem sempre faria. Por exemplo, nem sempre eu queria que a DropDown fosse ordenada, e nem sempre eu queria adicionar, eu queria limpá-la e colocar só a sequência que estou passando...
Aí ficava algo parecido, do tipo
 
@TiagoCésarOliveira É, não discutamos aqui.
 
AtualizarDDL(sequencia, limpar: true); // Limpa a DDL antes de adicionar a sequência
AtualizarDDL(sequencia, ordenarPor: pessoa => pessoa.Idade); // Adiciona e depois ordena
 
6:42 PM
@AndréLeria Entendi. Os Overloads e Named Parameters que você se refere são o quê?
Ou você quis dizer que eles são do Obj-C e não do C#?
 
@Piovezan Overloads são como no Java: métodos com nomes iguais, mas com parâmetros diferentes
Named Parameters são basicamente argumentos para métodos que são opcionais e têm um valor padrão
O que o Obj-C tem que o C# não tem é o Message-Passing Style
Que é o estilo de argumentos dele
 
Ah sim.
 
Na verdade, como eu disse, o MPS também não é novo do Obj-C, ele veio do Smalltalk
 
Muito interessante o C#. Se não me engano, a programação multithread tem umas diferenças interessantes em relação ao Java, mas meu colega explicou muito por cima.
 
@Piovezan O C# era fraco em Multithreading antes do .NEt 4, e só aperfeiçoou no 4.5
O .Net 4 introduziu a TPL e o PLINQ
O 4.5 introduziu o async / await, esses sim são legais
 
6:50 PM
Bacana.
 

« first day (93 days earlier)      last day (3691 days later) »