Ao aprender uma nova linguagem de programação, você às vezes encontra um recurso de linguagem que faz com que você deseje tê-lo nas outras linguagens de programação que você conhece.
Quais são alguns recursos de linguagem que na época você aprendeu muito novos e que você gostaria que suas outras linguagens de programação tivessem.
Um exemplo disso são os geradores em Python ou C #. Outros exemplos podem incluir compreensão de lista em Python, modelo em C ++ ou LINQ em .NET ou avaliação lenta em Haskell.
Que outros recursos de idioma semi-exclusivos você encontrou e que foram completamente novos e esclarecedores para você? Existem outros recursos de linguagens de programação mais antigas que foram únicos e ficaram fora de moda?
fonte
Macros Lisp.
A linguagem de macro Lisp é Lisp, com alguns recursos de sintaxe predefinidos por conveniência. Usando-os, é possível adicionar recursos importantes ao idioma, como a escolha de estilos de orientação a objetos ou a correspondência determinística do tipo Prolog, sem parecer fora do lugar. Isso torna
setf
possível a macro, que é uma macro conceitualmente muito poderosa:(setf A B)
significa que, quando você avalia,A
você obtémB
e pode ser estendida para qualquer limite que desejar.A metaprogramação de modelos C ++ é capaz de coisas semelhantes, mas em uma linguagem muito diferente da C ++ comum.
fonte
Decorador de Python.
É extremamente fácil implementar memorização ou tempo de função usando o decorador.
Exemplo de um temporizador de função.
Agora, se você tem uma função que deseja cronometrar, basta fazer isso,
Você verá algo como,
A função 'foo' levou 3 segundos.
fonte
Transmitindo para
void*
C. Você pode converter tudo em bytes não processados e fazer o que quiser com esses dados.(Sim, hoje em dia é único ...)
fonte
void*
...Pointer
Pascal e Object Pascal faz a mesma coisa.int64_t
quais nem sempre pode transmitir com segurançavoid *
(desculpe pelo atraso - resposta de 2 anos).Rendimento em Python
No Python (e acredito em C #), você pode definir um gerador chamado que interrompe a execução da função em uma
yield
instrução, retorna o valor e, nas chamadas subseqüentes, reinicia a função de onde parou (com o estado preservado entre as chamadas). Isso é ótimo para gerar longas listas de valores em que você está interessado apenas no valor atual da função (o que é muito comum). Permite construir sequências potencialmente infinitamente longas, ocupando apenas um espaço muito limitado na memória.fonte
Expressões lambda (fechamentos, funções aninhadas, métodos anônimos, como você os chama).
Encontrei-os pela primeira vez em Perl, amei-os instantaneamente e me perguntei por que outros idiomas não os têm. Hoje em dia acho que não é mais tão único; até o PHP conseguiu invadir eles de alguma forma. Mas eles eram semi-únicos na época.
fonte
Continuações do Scheme (posteriormente adotadas por alguns outros idiomas, incluindo Ruby.)
fonte
Conjuntos em Delphi são muito úteis, praticamente apenas uma matriz booleana nomeada. Eles são muito úteis para salvar um formulário de configurações com 32 caixas de seleção. Mas eles têm as mesmas funções da teoria dos conjuntos (diferença, interseção, união).
Não tenho certeza se eles ficaram fora de moda, mas eu os uso o tempo todo.
fonte
Mandar
De Erlang. Envia uma mensagem assíncrona para outro thread.
Receber
De Erlang. Recebe uma mensagem de outro segmento.
fonte
Propriedades de C #
vs
(Java)
fonte
Sindicatos em C
Sinceramente, não posso dizer que não tenha escrito C suficiente para criar um desses, mas trabalhei com o código de outros.
Quando se trata de empacotar misturas de dados diferentes em aplicativos que manipulam bits / bytes brutos, como rede ou armazenamento de dados binários. Em linguagens fortemente tipadas, não há maneira fácil de fazer o equivalente.
Aviso Legal:
Embora os Unions sejam extremamente úteis em alguns casos, eles não são encontrados na maioria dos idiomas de nível superior porque não são do tipo seguro. IE, você pode fazer com que os dados sangrem através dos limites das variáveis usando uniões (um grande não não no tipo mundo seguro). Com grandes poderes vem grandes responsabilidades.
fonte
union
uso é segura, algumas são expressões bem suportadas (embora tecnicamente não estejam corretas) - consulte cellperformance.beyond3d.com/articles/2006/06/… (embora seja mais problemático o fato de os sindicatos de ponteiros poderem simular).record
sintaxe para apoiar os sindicatos:in_addr = record case integer of 0: (S_un_b: SunB); 1: (S_un_w: SunW); 2: (S_addr: u_long); end;
Eu realmente gosto do modificador , a menos que esteja em Ruby . Parece tão natural e substitui muitos cenários em que seu código parece muito confuso sem ele.
Como você pode não gostar disso? : D
fonte
unless
ewhen
que substituem os cenários de ramificação mais comuns que tradicionalmente usariamif/else
.sintaxe de argumento de python chique
Não tenho certeza de como isso é único, mas em python você pode fazer coisas legais, como fazer com que os pares de palavras-chave sejam automaticamente transformados em um dicionário e retornados. O mesmo com as listas:
documentos python (role para baixo para obter mais informações sobre como colar argumentos)
fonte
O pré-processador C. Você pode até escrever código comum em diferentes plataformas com - menos ou mais - ifdefs.
fonte
Categorias do Objetivo-C
As categorias oferecem uma maneira fácil de estender a funcionalidade de um objeto em tempo de execução (pense em composição versus herança). O exemplo clássico é adicionar um verificador ortográfico à classe NSString.
Também é útil para correções de bugs de baixo impacto, já que a implementação de um método por uma categoria substituirá a implementação de seus pais.
fonte
O método de injeção do Ruby combinado com o recurso Symbol # to_proc do Ruby 1.9 permite escrever um código incrivelmente conciso (mas ainda legível):
por exemplo
(1..10).inject(:+)
que soma os números inteiros 1 a 10 => 55
Ver exemplos como esse me fez querer aprender Ruby, o que acabei de começar a fazer.
fonte
O mecanismo de ligação no JavaFX (RIP). A palavra-chave bind permite vincular o valor de uma variável ao valor de uma expressão e livrar-se de todos aqueles ouvintes feios, qualquer que seja o código padrão.
Embora o JavaFX tenha sido um fracasso de várias maneiras, achei muitos recursos da linguagem de script bastante agradáveis.
fonte
Mixins de strings mais avaliação da função de tempo de compilação em D é um recurso matador bastante exclusivo. Sim, tecnicamente são dois recursos, mas o poder real vem da combinação deles. Com essa combinação, você pode escrever funções D regulares que geram código como uma string no tempo de compilação e, em seguida, misturar esse código em qualquer escopo e fazer com que seja avaliado como código D. regular. O código é totalmente compilado estaticamente e executa exatamente como se tivesse sido manuscrito. Esse recurso é usado até para solucionar algumas situações complicadas na biblioteca padrão.
fonte