-
Notifications
You must be signed in to change notification settings - Fork 17
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Semana 2 - Dúvidas #25
Comments
@vitorbritto as dúvidas recorrentes para esta semana 2 deverão ser publicadas em qual link? |
@leo386386 aqui mesmo. =] |
@vitorbritto ok 👍 var truevar = 4; var fakevar = 2; this.fakevar2 = 3; document.write(delete truevar); document.write(delete thisfakevar); document.write(delete this.fakevar2); |
Outro exemplo que achei bem interessante é utilizando o operador && var a=1,b=1;
if (a == b) alert("teste1");
(a == b) && alert("teste2"); Engraçado pois na segunda linha com deste script acima ele utilizou uma mistura de condição ternária primeiro verificou e caso a condição seja verdadeira o que está depois do && é executado caso seja false o && funciona como uma espécie de break. |
@leo386386 eu testei aqui o seu código usando delete, então vamos lá: Acredito por vc ter usando o uma pagina html para testar, e não o console e/ou firebug, vc não percebeu que as variáveis: var truevar = 4;
var fakevar = 2; Não foram deletada na verdade, somenta a this.fakevar2, pois ela estava associada ao object Window, o método O delete retorna true mesmo para propriedades inexistentes, por isso o document.write deve ter printado true quando vc tirou o "." e deletou variáveis invés de propriedades. Quando ao dúvida sobre short circuiting: Bem isso e algo bem comum em programação, caso a fosse diferente b a expressão não continuaria pois faz um teste logico usando &&, e obrigatório q todas as condições sejam true, e a primeira verificação já retorna false não há o porque o continuar testando as demais, e a função não e disparada, quando e bom usar ai já não sei, mas e algo bem legal. |
var vazio = "",
preenchido = "preenchido",
testeOr = vazio || preenchido,
testeAnd = vazio && preenchido;
console.log("[" + testeOr + "]"); // [preenchido]
console.log("[" + testeAnd + "]"); // []; string vazia @leo386386 apresar de vazio e preenchido não serem booleanos, eles são booleanáveis. Já vi muito o || sendo usado como Null Coalesce Operator Parece até mais bonito (apesar de que, neste caso, não terem a mesma semântica) Acho que o ponto é a legibilidade. |
PS: booleanável eu tirei da minha cabeça mesmo. Se houver termo melhor comentem... |
@andersonaap o termo correto é booleans, e são dados primitivos que retornam valores TRUE ou FALSE. |
outro legal, return x && x.y; |
@vitorbritto thx |
Só para ficar claro, tudo em JavaScript tem um valor booleano inerente conhecido Truthy e Falsy. Os seguintes valores podem ser considerados Falsy:
Todos os outros são considerados como truthy, incluindo "0" (zero entre aspas), "false" (false entre aspas), funções vazias, arrays vazios e objetos vazios. =] |
@osmarcs obrigado por me lembrar que o Quanto ao short circuiting legal percebi isso obriga o retorno true boa explicação obrigado por esclarecer dúvidas. Sei que são bobas pra vocês que tem um nível legal em JS, mas acho melhor perguntar do que engolir o mosquito e ele ficar voando no pensamento rsrsrr. |
@andersonaap obrigado por explicar e mostrar semânticas diferentes utilizando o que o autor chama de "short circuiting". |
Algo interessante quando testei a declaração de funções foi o seguinte: function oi(){
return {diga: ola};
// atribuindo a funcao a uma variavel
var ola = function(){
console.log('Oi disse ola');
};
}
x = oi();
// result = Object {diga: undefined} Mas quando usamos a instrução de declaração de função : function oi(){
return {diga: ola};
function ola(){
console.log('Ola disse oi');
};
}
x = oi();
// result = Object {diga: function} Provando que as instrução de variáveis são declaras da execução do codigo. |
Dia 27/02, text = "pablo é muito legal";
var myName = "pablo";
var hits = [];
for(var i = 0; i < text.length; i++) {
if (text[i] == "p") {
for(var j = i; j < (myName.length + i); j++) {
hits.push(text[j]);
}
}
if(text.length === 0){console.log("Your name wasn'tfound!");
}else{
console.log(hits);
}
} |
function oi(){ // atribuindo a funcao a uma variavel var ola = function(){ console.log('Oi disse ola'); }; return {diga: ola}; } x = oi(); // Object {diga: function} |
@leo386386 desse jeito fica normal, mas o que queria mostrar que as functions tem maior precedência na execução do código do que a variáveis. |
@osmarcs Na real, o problema acontece por causa da instrução Como você está atribuindo a função à uma variável, o código será lido, mas a ação de atribuir não será executada. Por isso ele não reconhece a função. Já no caso de declarar a função sem atribuir a uma variável, você somente está criando ela, sem efetuar nenhuma ação. Por isso ela vai ser lida será chamada na instrução return, mesmo estando declarada após o return :) |
@fdaciuk , sim cara eu sei, eu só queria era compartilhar um exemplo, sobre o assunto, não foi uma dúvida, rsrs, mas valew pela prestatividade de vc e do @leo386386. |
@osmarcs Ah, tá xD É que vc postou no tópico de Dúvidas, haha :P |
@osmarcs @fdaciuk será que meu raciocínio está certo? compreendi que você pode chamar uma função JavaScript antes de declará-la exceto a forma literal que foi mostrado no primeiro exemplo! |
@leo386386 se eu entendi bem seu raciocínio, é isso mesmo. Tipo: Exemplo 1: retorna sayHello(); // TypeError: sayHello is not a function
var sayHello = function() {
console.log('Hello');
}; Exemplo 2: retorna var sayHello = function() {
console.log('Hello');
};
sayHello(); // Hello Exemplo 3: retorna sayHello(); // Hello
function sayHello() {
console.log('Hello');
} É isso mesmo que você quis dizer ou entendi errado? xD |
@HenriqueSilverio obrigado pela prestatividade e confirmação. Realmente no livro tem o conceito de Hoisting e define que é uma elevação (içamento):. vlw meu brother" 👍 |
Seria uma boa prática utilizar operações ou chamadas de função ou acesso a propriedade de objetos como expressões do case! ou não é aconselhável? var divisao = function(){ return 5 * 2 ; } var objeto = { idade:25 }; var l = 25; switch(l){ case 2+6: alert("bloco 1"); break; case "16"/4: alert("bloco 2"); break; case divisao(): alert("bloco 3"); break; case objeto.idade: alert("bloco 4"); break; } "short circuiting" var a=2,b=2; switch((a == b)&& true){ case true: alert("bloco 5"); break; } |
Estou lendo o guia em inglês e tive uma certa dificuldade pra entender o uso do construtor RegExps(), alguém poderia me ajudar a entendê-lo melhor? O texto também mostra como exemplo: Certo, qual o motivo do circunflexo? Os exemplos que vem abaixo dele não o possuem, isso também me deixou bastante confuso. |
@dotpegaso quando no livro diz "textual patterns" significa o padrão de texto que a regex vai tentar corresponder(casar), se criar uma regex:
Quanto ao circunflexo ele próprio da expressões regulares, e é usado para dizer que o texto deve começar com aqueles caracteres, caso vc teste só será retornado true se a string comecar com HTML. |
@osmarcs Ah, agora entendi! Ele funciona então como um (porcamente falando) "validador de strings" neste caso que você exemplificou né? Testei aqui no console e vi que realmente, se eu passo uma string dentro de regex.test(" "); que não tenha a palavra "novo" ele retorna false, porém, se eu passar uma com a palavra "novo", ele retorna true. Independente do lugar que essa palavra estiver na string. Já o circunflexo eu entendi também, fiz o teste aqui e toda frase que eu colocava sem o "novo" estar em seu início, retornava como false. Já clareou bastante as coisas pra mim, obrigado mesmo bro! (: |
@leo386386 eu não acho apropriado usar operações ou retorno de funções(principalmente esse), devido a que quando vc tem uma instrução switch..case, vc já considera possíveis resultados para os teste, se nenhum case bater é executado o default. Lógico q sempre vão existir exceções que caberão a vc como programador decidir se e a melhor solução. Exemplo disso no jogo pedra, papel e tesoura da CodeAcademy, utilizei um swicth para os testes e para ver se as escolha1 e a escolha2 dois são iguais coloque a escolha2 como valor do case. |
@osmarcs fiz o switch desta forma só por curiosidade. vlw pelo feedback! |
@dotpegaso bem interessante sua pergunta, que bom que o @osmarcs conseguiu te ajudar. Vale lembrar também, que o uso de RegExps() é bem mais complexo que isso, e será abordado mais a fundo no capitulo 10 do livro, que é estudado na semana 5 do roteiro. |
@HenriqueSilverio Sim sim, o feedback dele foi bem preciso. E imagino que realmente seja mais complexo, vi nos exemplos que dá pra envolver operações também e algumas outras coisas, estarei esperando pela semana 5 então. :P Bom, sobre os estudos, por conta da faculdade eu infelizmente não consegui terminar o roteiro da semana 2 em tempo... mas vou aproveitar esse feriadão de carnaval pra finalizar tanto ele quanto adiantar bastante o da semana 3 também, que inicia amanhã. Estou amando o codeAcademy, nunca havia usado. O jeito deles de ensinar é ótimo! |
Inicio: 23/02/2014 ~ Fim: 01/03/2014
Instruções: https://github.com/impJS/impAprendaJS/wiki/Semana-2
The text was updated successfully, but these errors were encountered: