Pular para o conteúdo principal

Contador fora do FOR?

Pequenas dicas do dia a dia para quem realmente gosta de programar.

Se a sincera frase de um ator desconhecido que diz "Honestidade em pequenas coisas nunca é uma coisa pequena" é verdade, então também venho a crer que qualidade de código em pequenos códigos nunca é tempo perdido.

Veja uma situação simples que foge de 70% dos bons desenvolvedores:

Suponhamos que você tenha que percorrer uma coleção de objetos que estão em um array.


1
var array = new string[arrayLength];

E precisa percorrê-lo.

É claro que o primeiro código que te vem a cabeça é


1
for (int i = 0; i < array.Length; i++) { /* qualquer coisa... */ }

Não tem problema, na minha também, mas o que você não sabe é que pequenas atitudes mudam o mundo. No código acima, todas as vezes que o loop for executado você também executará uma chamada ao método ...


1
array.Length

Agora, se puxarmos esta chamada para fora do laço, executaremos somente uma vez e todas as verificações sequenciais serão sobre uma constante.


1
2
3
4
5
var length = array.Length;
for (int i = 0; i < length; i++)
{ //tempo constante }

Não acredita que melhora?

Olha o tempo na execução do código abaixo.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int arrayLength = 10000;
            var array = new string[arrayLength];
            for (int i = 0; i < arrayLength; i++)
            {
                array[i] = string.Format("[{0}] = {1}"
                                , i.ToString()
                                , Guid.NewGuid());
            }

            Stopwatch sw = new Stopwatch();
            sw.Start();
            for (int i = 0; i < array.Length; i++) { /* qualquer coisa... */ }
            sw.Stop();
            Console.WriteLine(sw.Elapsed);

            sw.Reset();
            sw.Start();
            var length = array.Length;
            for (int i = 0; i < length; i++)
            {
                //tempo constante
            }
            sw.Stop();
            Console.WriteLine(sw.Elapsed);

            Console.Read();
        }

    }
}



E só a título de curiosidade, se fizermos o foreach.



Interessante né?

Logo, mande bem com for e comparação fora do laço.

Comentários

Postagens mais visitadas deste blog

Lendo sobre o Mercado! Isso vai dar certo?

Economia? Todo mundo sabe que não sou um investidor de sucesso (basta ver que ainda não fiquei milionário), mas gosto de tentar entender como o mercado funciona. Faço analisando diversas opiniões publicadas em tablóides sobre o assunto (principalmente sobre o mercado de ações). E, se é assim, porque não escrever um pouco sobre isso? Com certeza vai manter as minhas noites ocupadas e espero proporcionar um pouco de feedback  sobre as minhas erradas opiniões... (não estou sendo modesto, na verdade digo erradas porque ainda não consegui acertar) Sem mais delongas... ... existe um novo artigo no site do InfoMoney intitulado "O que comprar e o que vender na bolsa em 2014, de acordo com gestor"   que apresenta opiniões acerca do que pode acontecer no mercado acionário no ano de 2014 pelo Mendes (Walter Mendes). Basicamente o autor defende que a economia vai se manter estagnada (crescendo míseros 2%), mas a inflação vai continuar alta. O que isto quer dizer? Os consumido...

Comunicação é a alma do negócio

Eu não sei se todo chefe sabe, mas em qualquer almoço em que mais de dois subordinados estejam reunidos sem que “o carrasco” esteja presente, ele será o assunto principal! Não importa se é bom ou ruim ou se é empenhado ou não, é irressistível não falar daquele que é responsável por nossa produtividade! Foi assim nos tempos de colégio, quando os nossos pais mandavam a gente estudar, foi assim na faculdade quando nossas namoradas ligavam a todo momento e é assim no dia-a-dia de trabalho. E o tema da conversa nem sempre é bom… Mas sabe o que todo chefe devia fazer? Ele devia achar ÓTIMO! É importantíssimo receber  feedbacks!  Infelizmente a quantidade de retornos que recebemos é inversamente proporcional ao cargo que desempenhamos. Se dizer para o chefe o quanto ele está se saindo bem já é difícil, imagina dizer que tudo o que ele faz é atrapalhar o andamento dos processos! Falar olhando para cima é muito mais complicado do que falar olhando para frente. E,  se ...

Ter um alvo onde colocar a mira é o segredo de todo início de projeto.

Imediatamente após nós, jovens empreendedores, identificarmos uma “necessidade de sucesso”, sofremos uma súbita onda de empolgação! A descoberta esta tão fresca na cabeça que começamos a bolar milhões de planos sobre como o produto ou o serviço poderia ser. Surge uma vontade imensa de compartilhar com outras pessoas a possibilidade de negócio. Realmente acreditamos que a idéia pode ser uma excelente oportunidade (e na maioria das vezes ela o é)! Esta é a melhor fase, mas infelizmente também é a mais perigosa por três motivos: 1º Para começar porque a maioria das pessoas com quem você comentará não esta preparada para trilhar caminhos fora de uma zona de conforto. Elas vão comentar sobre o trabalho despendido e que já existem dezenas de produtos iguais no mercado, que você será só mais um etc… Mas você já pensou no mundo sem o Google? Um produto nada inovador que hoje representa um império de 100 bilhões de dólares… E o facebook? Outra empresa bilionária. 2º Por ca...