Pergunta

Desde o uso de uma série de linguagens de programação e bibliotecas tenho notado vários termos usados ??para o número total de elementos em uma coleção.

O mais comum parece ser length, count e size.

por exemplo.

array.length
vector.size()
collection.count

Existe algum termo preferido para ser usado? Será que depende de que tipo de coleção que é? ie. mutável / imutável

Existe uma preferência por ele ser uma propriedade em vez de um método?

Foi útil?

Solução

Length() tende referir-se a elementos contíguos - uma cadeia tem um comprimento, por exemplo.

Count() tende referir-se ao número de elementos de um conjunto mais solta.

Size() tende a referem-se ao tamanho da colecção, muitas vezes isso pode ser diferente a partir do comprimento, em casos como vectores (ou cordas), pode ser de 10 caracteres de uma cadeia, mas está reservado para armazenamento 20. Também pode referem-se a série de elementos -. fonte de verificação / documentação

Capacity() - usado para se referir especificamente ao espaço alocado na coleta e não número de elementos válidos na mesma. Se tipo tem tanto "capacidade" e "tamanho" definido em seguida, "tamanho" geralmente refere-se ao número de elementos reais.

Eu acho que o ponto principal é para baixo a linguagem humana e expressões idiomáticas, o tamanho de uma string não parece muito óbvio, enquanto o comprimento de um conjunto é confuso igualmente, embora possam ser usados ??para se referir à mesma coisa ( número de elementos) em um conjunto de dados.

Outras dicas

FWIW (e isso é infinitamente perto de nada), eu prefiro 'Conde' porque parece indicar que ele vai retornar o número de elementos / itens na coleção bastante sem ambiguidade.

Quando confrontados com os termos 'tamanho' ou 'Tamanho' Estou deixados frequentemente querer saber por um momento (ou mesmo ser forçado a documentação re-leitura) se a maldita coisa vai me dizer quantos elementos estão na colection ou quantos bytes a coleção está consumindo. Isto é particularmente verdadeiro para as coleções que se destinam a ser contingous como arrays ou strings.

Mas ninguém que foi responsável pelas convenções de nomenclatura utilizadas pelo Java, BCL / .Net, ou C / C ++ padrão frameworks / bibliotecas se preocupou em me perguntar, então está tudo preso com o que eles vieram com.

Se eu fosse muito mais inteligente do que eu sou e foi nomeado Bjarne, todos que você pode ser poupado a miséria ...

É claro que, de volta ao mundo real, você deve tentar ficar com o que quer convenção de nomenclatura é usada pela linguagem / plataforma que você está usando (por exemplo., size() em C ++). Não que isso parece ajudá-lo com o seu dilema Array.Length.

Os termos são um pouco como sinônimos, embora em algumas situações eu preferiria um sobre o outro. Normalmente você pode obter o melhor uso se você pensar sobre Como você descreveria o comprimento / tamanho / contagem deste elemento verbalmente a outra pessoa? .

length() implica que o elemento tem um comprimento. A corda tem um comprimento. Você diz "uma string é 20 caracteres", certo? Por isso, tem um comprimento.

size() implica que o elemento tem um tamanho. Por exemplo. um arquivo tem um tamanho. Você diz que "este arquivo tem um tamanho de 2 MB", certo? Por isso, tem um tamanho.

Dito isso, uma string também pode ter um tamanho, mas eu esperaria outra coisa aqui. Por exemplo. um UTF-16 corda pode ter um comprimento de 100 caracteres, mas como cada personagem é composta de dois bytes, eu esperaria tamanho para ser 200.

count() é muito incomum. Objectivo usos-C contar para o número de elementos em uma matriz. Pode-se argumentar se um array tem um comprimento (como em Java), tem um tamanho (como na maioria das outras línguas) ou tem uma contagem. No entanto, o tamanho pode ser novamente o tamanho em bytes (se os itens de matriz são de 32 bits int, cada item é de 4 bytes) e comprimento ... Eu não diria "uma matriz é 20 elementos de comprimento", que soa um pouco estranho para mim. Eu diria que "um array tem 20 elementos". Eu não tenho certeza se expressa contagem isso muito bem, mas acho que a contagem é aqui uma forma abreviada para elementCount() e que novamente faz muito mais sentido para um array de comprimento () ou tamanho ().

Se você criar próprios objetos / elementos em uma linguagem de programação, é melhor usar o que outros elementos semelhantes usar, uma vez que os programadores são usados ??para acessar a propriedade desejada usando esse termo.

Contagem eu acho que é o termo mais óbvio para uso, se você está procurando o número de itens em uma coleção. Que deve mesmo ser óbvio para novos programadores que não se tornaram particularmente ligados a uma determinada linguagem ainda.

E deve ser uma propriedade como isso é o que é: uma descrição (aka propriedade) da coleção. Um método implicaria que ele tem que fazer alguma coisa para a coleção para obter o número de itens e que apenas parece unintuitive.

Hmm ... Eu não usaria tamanho. Porque isso pode ser confundido com o tamanho em bytes. Comprimento - poderia fazer algum sentido para matrizes, contanto que eles deveriam usar consequentes bytes de memória. Embora ... comprimento ... em quê? Contagem é clara. Quantos elementos. Gostaria de usar a conta.

Sobre a propriedade / método, gostaria de usar a propriedade para marcá-lo rápido, e método para marcá-lo é lento.

E, o mais importante -. Eu iria ficar com as normas das línguas / bibliotecas que você está usando

Adicionando a @ da gbjbaanb resposta ...

Se a "propriedade" implica o acesso público ao valor, eu diria que "método" é preferível simplesmente fornecer encapsulamento e para esconder a implementação.

Você pode mudar se importa sobre como count elementos ou como você manter essa count. Se é uma propriedade, você está preso -. Se for acessado através de um método, você pode alterar a implementação subjacente, sem afetar os usuários da coleção

Em Elixir há realmente um esquema de nomenclatura clara associada a ele em todos os tipos na língua.

Quando “contagem” o número de elementos numa estrutura de dados, Elixir também cumpre uma regra simples: a função é chamado size se o operação é constante no tempo (isto é, o valor é pré-calculada) ou length se a operação é linear (isto é, o cálculo do comprimento recebe mais lento como a entrada cresce).

Para mim, isso é um pouco como perguntar se "foreach" é melhor do que "para cada". Ele só depende da linguagem / framework.

Eu diria que isso depende de determinado idioma que você está usando e aulas . Por exemplo, em c # se você estiver usando matriz você tem Propriedade Comprimento, se você tem algo que herda de IEnumerable você tem extensão Método Contagem (), mas não é rápido. E se você herdou de ICollection você tem Propriedade Contagem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top