Pergunta

Eu continuo a ouvir este termo lançados ao redor em vários contextos diferentes. O que é isso?

Foi útil?

Solução

A programação declarativa é quando você escreve o seu código de tal forma a que descreve o que você quer fazer, e não como você deseja fazê-lo. Ele é deixada para o compilador para descobrir como.

Exemplos de linguagens de programação declarativas são SQL e Prolog.

Outras dicas

As outras respostas já fazem um trabalho fantástico explicando o que é programação declarativa, por isso estou indo só para dar alguns exemplos de por que isso pode ser útil.

Contexto da Independência

Programas declarativas são independente de contexto . Porque eles só declarar que o objetivo final é, mas não os passos intermediários para alcançar esse objetivo, o mesmo programa pode ser usado em diferentes contextos. Isso é difícil de fazer com programas imperativos , porque muitas vezes eles dependem do contexto (estado por exemplo oculto).

Faça yacc como um exemplo. É um gerador de analisador aka. compilador compilador, um DSL declarativa externo para descrever a gramática de uma língua, de modo que um analisador para que a linguagem pode ser automaticamente gerado a partir da descrição. Devido à sua independência contexto, você pode fazer muitas coisas diferentes com tal gramática a:

  • Gerar um analisador C para que a gramática (o caso de uso original para yacc)
  • Gerar um analisador C ++ para que a gramática
  • Gerar um analisador Java para que a gramática (usando Jay)
  • Gerar um analisador C # para que a gramática (usando GPPG)
  • Gerar um analisador de Ruby para que a gramática (usando Racc)
  • Gerar uma visualização de árvore para que a gramática (usando GraphViz)
  • simplesmente fazer alguma impressão bonita,-fantasia formatação e destaque de sintaxe do próprio arquivo de origem yacc e incluí-lo em seu Manual de Referência como uma especificação sintática de seu idioma

E muito mais ...

Otimização

Porque você não prescrevem o computador que as medidas a tomar e em que ordem, pode reorganizar o seu programa muito mais livremente, talvez até mesmo executar algumas tarefas em paralelo. Um bom exemplo é um planejador de consultas e otimizador de consulta para um banco de dados SQL. A maioria dos bancos de dados SQL permitem que você exiba a consulta que eles são realmente execução contra a consulta que você perguntou -los para executar. Muitas vezes, essas consultas olhar nada gostam um do outro. O planejador de consultas leva as coisas em conta que você nem sequer sonhou: latência de rotação do prato de disco, por exemplo, ou o fato de que alguma aplicação completamente diferente para um usuário completamente diferente apenas executada uma consulta semelhante e a tabela que você está juntando-se com e que você trabalhou tão duro para carregamento evitam já está na memória de qualquer maneira.

Há um trade-off interessante aqui: a máquina tem de trabalhar mais para descobrir o como para fazer algo do que seria em uma linguagem imperativa, mas quando se faz descobrir isso, ele tem muito mais liberdade e muito mais informação para a fase de otimização.

Livremente:

A programação declarativa tende para: -

  • Conjuntos de declarações ou instruções declarativas, cada um dos quais tem um significado (muitas vezes no domínio do problema) e podem ser compreendidas de forma independente e em isolamento.

programação imperativa tende para: -

  • As sequências de comandos, cada um dos quais executam alguma ação; mas que pode ou não ter significado no domínio do problema.

Como resultado, um estilo imperativo ajuda o leitor a compreender a mecânica do que o sistema está realmente fazendo, mas pode dar pouco de conhecimento sobre o problema que se pretende resolver. Por outro lado, um estilo declarativo ajuda o leitor a compreender o domínio do problema ea abordagem que o sistema leva para a solução do problema, mas é menos informativo sobre o assunto da mecânica.

programas reais (mesmo os escritos em linguagens que favorecem as extremidades do espectro, como ProLog ou C) tendem a ter dois estilos apresentar em vários graus em vários pontos, para satisfazer as complexidades variando e necessidades de comunicação da peça. Um estilo não é superior ao outro; eles só servem a propósitos diferentes, e, como acontece com muitas coisas na vida, a moderação é fundamental.

Sinto muito, mas devo discordar de muitas das outras respostas. Gostaria de acabar com este mal-entendido confusa da definição de programação declarativa.

Definição

Referencial transparência (RT) dos sub-expressão é necessário apenas atributo de uma expressão de programação declarativa , porque é o único atributo que não é compartilhada com programação imperativa.

Outro citado atributos de programação declarativa, derivar dessa RT. Por favor, clique no link acima para a explicação detalhada.

exemplo de planilha

Duas respostas mencionado programação planilha. Nos casos em que a programação planilha (fórmulas também chamadas) não mutável acesso Global estado, então é programação declarativa. Isso ocorre porque os valores das células mutáveis ??são o monolítico de entrada e saída do main() (todo o programa). Os novos valores não são escritas para as células após cada fórmula é executada, portanto, eles não são mutáveis ??para a vida do programa declarativa (execução de todas as fórmulas na planilha). Assim, em relação ao outro, as fórmulas de visualizar estas células mutáveis ??como imutável. Uma função de RT é permitido o acesso imutável estado global (e também mutável Local Estado ).

Assim, a capacidade de mutação os valores nas células quando o termina do programa (como uma saída de main()), não torná-los valores armazenados mutáveis ??no contexto das regras. A distinção chave é os valores das células não são actualizados depois de cada fórmula folha de cálculo é realizada, portanto, a fim de realizar as fórmulas não importa. Os valores das células são atualizados depois de todas as fórmulas declarativas foram realizados.

Aqui está um exemplo.

Em CSS (usado para páginas de estilo HTML), se você quiser um elemento de imagem a ser 100 pixels de altura e 100 pixels de largura, você simplesmente "declarar", que é o que você quer da seguinte forma:

#myImageId {
height: 100px;
width: 100px;
}

Você pode considerar CSS uma linguagem declarativa "folha de estilo".

O motor de navegador que lê e interpreta este CSS é livre para fazer a imagem aparecer esta altura e esta ampla no entanto ele quer. Diferentes mecanismos de navegador (por exemplo, o motor para o IE, o motor para o Chrome) irá implementar esta tarefa de forma diferente.

As suas implementações únicas são, é claro, não está escrito em uma linguagem declarativa, mas em um processual como Assembly, C, C ++, Java, JavaScript ou Python. Esse código é um monte de etapas a serem realizadas passo a passo (e podem incluir chamadas de função). Ele pode fazer coisas como valores de pixel Interpolar, e tornar na tela.

A programação declarativa é a imagem, onde a programação imperativa é instruções para pintar esse quadro.

Você está escrevendo em um estilo declarativo Se você é "Dizer que o que é", ao invés de descrever os passos que o computador deve tomar para chegar onde você quer.

Quando você usa XML para dados mark-up, você está usando programação declarativa, porque você está dizendo "Esta é uma pessoa, que é um aniversário, e ali é um endereço".

Alguns exemplos de programação onde declarativa e imperativa se combinam para maior efeito:

  • Windows Presentation Foundation usa a sintaxe XML declarativa para descrever o que uma interface de usuário parece, e que as relações (emperramentos) estão entre os controles e estruturas de dados subjacentes.

  • arquivos de configuração estruturados usar sintaxe declarativa (tão simples como "chave = valor" pares) para identificar o que uma string ou valor dos meios de dados.

  • HTML marcas texto com tags que descrevem o papel que cada pedaço de texto tem em relação a todo o documento.

imaginar uma página excel. Com colunas preenchidas com fórmulas para calcular você retorno de imposto.

Toda a lógica é feito declarado nas células, a ordem do cálculo é de determinar por si só fórmula em vez de processualmente.

Isso é uma espécie do que programação declarativa é tudo. Você declarar o espaço do problema e da solução e não o fluxo do programa.

Prolog é a linguagem que eu uso só tenho declarativa. Ele requer um tipo diferente de pensamento, mas é bom para saber se apenas para expô-lo a outra coisa que não a linguagem típica programação procedural.

Desde que eu escrevi a minha resposta anterior, formulei um nova definição da propriedade declarativa que é citado abaixo. Eu também tenho definido programação imperativa como a dupla propriedade.

Esta definição é superior ao que eu fornecido na minha resposta anterior, porque é sucinta e é mais geral. Mas pode ser mais difícil de Grokar, porque a implicação da incompletude teoremas aplicável a programação ea vida em geral são difíceis para os seres humanos a envolver sua mente em torno.

A explicação citado da definição discute o papel pura peças de programação funcional em programação declarativa.

declarativa vs. Imperativo

A propriedade declarativa é estranho, obtuso e difícil de captura em uma definição tecnicamente preciso que permanece em geral e não ambígua, porque é uma noção ingênua de que podemos declarar o significado (aka semântica) do programa sem incorrer colateral não intencional efeitos. Há uma tensão inerente entre a expressão do significado e prevenção de efeitos indesejados, e, na verdade, esta tensão deriva a partir de incompletude teoremas de programação e de nosso universo.

É simplificação, tecnicamente impreciso, e muitas vezes ambígua para definir declarativa como o que fazer e imperativa como como fazer . Um caso ambíguo é o “ o ” é o “ como ” em um programa que saídas de um programa- um compilador.

Evidentemente recursão ilimitada que faz uma linguagem Turing completa , é também analogamente na semantics- não só na estrutura sintática de avaliação (semântica aka operacionais). Este é logicamente um exemplo análogo ao theorem- de Gödel “ qualquer sistema completo de axiomas também é inconsistente ”. Pondera a estranheza contraditório de que a citação! É também um exemplo que demonstra como a expressão de semântica não tem um provável limite, assim não podemos provar 2 que um programa (e analogamente sua semântica) parada aka o teorema da parada.

Os teoremas da incompletude derivam da natureza fundamental do nosso universo, que, como afirmado na Segunda Lei da Termodinâmica é “ a entropia (aka o # de possibilidades independentes) está tendendo para o máximo sempre ”. A codificação e design de um programa nunca é Concluída- ele está vivo - porque ele tenta resolver uma necessidade mundo real, e a semântica do mundo real estão sempre mudando e tendendo para mais possibilidades. Os seres humanos nunca parada descobrir coisas novas (incluindo erros em programas; -).

Para precisamente e tecnicamente capturar essa noção desejada referido dentro deste universo estranho que não tenha nenhuma borda (Ponder isso! Não existe “fora” do nosso universo), exige uma concisa mas a definição enganosamente-não-simples que irá soar incorreta até explica-se profundamente.

Definição:


A propriedade declarativa é onde pode existir apenas um possível conjunto de declarações que podem expressar cada um específico modular semântica.

A propriedade imperativo 3 é o dual, onde semântica estão sob inconsistentes composição e / ou pode ser expresso com variações de conjuntos de declarações.


Esta definição de declarativa é distintamente Local no âmbito semântico, o que significa que requer que um modular semântica manter seu significado consistente, independentemente de onde e como ele é instanciado e empregados em Global escopo. Assim, cada declarativa modular semântica deve ser intrinsecamente ortogonais possível outros- e não um impossível (devido a teoremas da incompletude) Global algoritmo ou modelo para testemunhar a consistência, que é também o ponto de “ Mais nem sempre é melhor ”por Robert Harper, Professor de Ciência da Computação da Universidade Carnegie Mellon, um dos designers da standard ML.

Exemplos destas semântica declarativa modulares incluem categoria functors teoria por exemplo o Applicative , digitação nominal, namespaces, campos nomeados, e w.r.t. ao nível operacional da semântica em seguida, a programação funcional pura.

Assim bem desenhados linguagens declarativas podem expressar mais claramente o que significa , embora com alguma perda de generalidade, no que pode ser expressa, ainda um ganho no que pode ser expressa com consistência intrínseca.

Um exemplo da definição acima mencionada é o conjunto de fórmulas nas células de um-programa folha de cálculo que não se espera para dar o mesmo significado quando movido para diferentes células de linhas e colunas, isto é, os identificadores de células alteradas. Os identificadores de célula fazem parte e não supérfluo o significado pretendido. Assim, cada resultado planilha é w.r.t. única para os identificadores de célula em um conjunto de fórmulas. O consistente modular semântica, neste caso, é a utilização de identificadores de células como a entrada e saída de puro funções para as células de fórmulas (ver abaixo).

Hyper Text Markup Language aka HTML- o idioma para páginas- web estática é um exemplo de uma altamente (mas não perfeitamente 3 ) linguagem declarativa que (pelo menos antes de HTML 5) não teve capacidade para expressar comportamento dinâmico. HTML é talvez a língua mais fácil de aprender. Para o comportamento dinâmico, uma linguagem de script imperativo tais como JavaScript foi normalmente combinado com HTML. HTML sem JavaScript se encaixa na definição declarativa, porque cada tipo nominal (isto é, as tags) mantém o seu significado consistente sob composição dentro das regras da sintaxe.

A definição competindo por declarativa é a comutativa e idempotent propriedades das declarações semânticas, ou seja, que as declarações podem ser reordenadas e duplicados sem alterar o significado. Por exemplo, declarações atribuir valores para campos nomeados podem ser reordenadas e duplicada sem mudou o significado do programa, se esses nomes são w.r.t. modular a qualquer ordem implícita. Nomes, por vezes, implicam uma ordem, por exemplo, identificadores de célula incluem sua coluna e linha posição- movendo um total de planilha muda seu significado. Caso contrário, essas propriedades exigem implicitamente Global consistência de semântica. Em geral, é impossível projetar a semântica de declarações para que permaneçam consistentes se aleatoriamente ordenado ou duplicada, porque a ordem e duplicação são intrínsecos à semântica. Por exemplo, as declarações “Foo existe” (ou construção) e “que não existe Foo” (e destruição). Se considerarmos endêmica inconsistência aleatório da semântica destinados, em seguida, se aceita esta definição como bastante geral para a propriedade declarativa. em essênciaesta definição é vazia como uma definição generalizada porque tenta fazer consistência ortogonal à semântica, ou seja, para desafiar o fato de que o universo de semântica é dinamicamente ilimitada e não pode ser capturado em um Global coerência paradigma.

Exigindo as propriedades conmutativos e idempotentes para o (ordem estrutural avaliação da) de nível inferior semântica operacional convertidos semântica operacional a um declarativa localizada modular semântica, v.g. pura programação funcional (incluindo a recursividade em vez de loops imperativas). Em seguida, a ordem operacional dos detalhes de implementação não impacto (ou seja propagação globalmente em) a coerência da semântica de alto nível. Por exemplo, a ordem de avaliação de (e, teoricamente, também a duplicação de) as fórmulas de folha de cálculo não importa, porque as saídas não são copiadas para as entradas até depois de todas as saídas têm sido calculado, isto é análogo a funções puras.

C, Java, C ++, C #, PHP e JavaScript não são particularmente declarativa. sintaxe de Copute e sintaxe do Python são mais declarativa acoplado a resultados pretendidos, isto é, a semântica sintáticos consistentes que eliminam a estranhos para que se possa prontamente compreender o código depois de terem esquecido. Copute e Haskell impor determinismo das semântica operacional e incentivar “ não repita -se ”(DRY), porque eles só permitem o paradigma funcional pura.


2 Mesmo onde podemos provar a semântica um programa, por exemplo, com a linguagem Coq, este é limitado a semântica que são expressos em a digitação , e digitando nunca pode capturar todos os semântica de um programa- nem mesmo para idiomas que não são Turing completo, por exemplo, com HTML + CSS é possível expressar combinações inconsistentes que têm, assim, a semântica indefinidos.

declarações 3 Muitas explicações afirmam incorretamente que a programação único imperativo tem sintaticamente ordenada . Esclareci esta confusão entre imperativo e programação funcional . Por exemplo, a ordem das declarações HTML não reduz a consistência de seu significado.


Edit: eu postei o seguinte comentário ao blog do Robert Harper:

na programação funcional ... o intervalo de variação de uma variável é um tipo

Dependendo de como se distingue funcional do imperativo programação, o seu ‘transferível’ em um programa imperativo também pode ter um tipo de colocação de um ligado na sua variabilidade.

A definição apenas não-confusa atualmente eu aprecio para funcional A programação é uma) funciona como objectos de primeira classe e tipos, B) preferência por recursão nos lacetes, e / ou c), isto é, puro funções- aquelas funções que não têm impacto a semântica desejadas do programar quando memoized ( , assim, perfeitamente puro funcional programação não existe em um propósito geral semântica denotacional devido a impactos de semântica operacionais, por exemplo memória alocação ).

O idempopropriedade tenda de uma função pura significa a chamada de função no suas variáveis ??pode ser substituído pelo seu valor, o qual não é geralmente o caso para os argumentos de um procedimento imperativo. funções puras parecem ser w.r.t. declarativa às transições de estado incomposto entre os tipos de entrada e de resultados.

Mas a composição de funções puras não mantém qualquer consistência, porque é possível modelar um efeito colateral (global Estado) processo imperativo em uma linguagem de programação funcional pura, por exemplo. IOMonad e de Haskell, além disso, é totalmente impossível Evitar fazer tal em qualquer programação funcional pura completa Turing linguagem.

Como eu escreveu em 2012, que parece o consenso semelhante de comentários na seu blog recente , que a programação declarativa é um tentar capturar a noção de que a semântica destinados nunca estão opaco. Exemplos de semântica opacas são dependência de ordem, dependência de apagamento de semântica de nível mais elevado no nível operacional camada semântica (por exemplo moldes não são conversões e genéricos reificadas limitar de nível superior semântica ), e a dependência de valores de variáveis que não pode ser verificado (se mostrou correta) pela linguagem de programação.

Assim, cheguei à conclusão de que só não Turing línguas completa pode ser declarativa.

Assim, um atributo inequívoca e distinta de uma linguagem declarativa Pode ser que sua saída pode ser comprovada a obedecer a um conjunto enumerável de regras generativas. Por exemplo, para qualquer programa específico HTML (ignorando diferenças na divergem maneiras intérpretes) que não é roteirizado (Isto é, não é Turing completa), em seguida, a sua variabilidade de saída pode ser enumeráveis. Ou de forma mais sucinta um programa HTML é uma função pura de sua variabilidade. programa Ditto uma planilha é uma função pura de sua variáveis ??de entrada.

Assim, parece-me que linguagens declarativas são a antítese do ilimitada recursão , segundo incompleto i.e. por Gödel teoremas auto-referenciais teorema não pode ser comprovada.

Lesie Lamport escreveu um conto de fadas sobre como Euclides pode ter contornado teoremas da incompletude de Gödel aplicada a provas de matemática no contexto linguagem de programação pela congruência entre tipos e lógica (Curry-Howard correspondência, etc).

É um método de programação baseado em torno descrevendo o algo deveria fazer ou ser, em vez de descrever como ele deve funcionar.

Em outras palavras, você não escrever algoritmos feitos de expressões, você acabou de layout de como você quer que as coisas sejam. Dois bons exemplos são HTML e WPF.

Este artigo Wikipedia é uma visão boa: http://en.wikipedia.org/wiki/Declarative_programming

Descrevendo a um computador que você quer, não como fazer algo.

I têm refinado o meu entendimento de programação declarativa, desde dezembro 2011, quando eu desde uma resposta a esta pergunta. Aqui segue o meu entendimento atual.

A versão longa do meu entendimento (pesquisa) é detalhado em este link , que você deve ler para obter uma compreensão profunda do resumo I irá fornecer abaixo.

programação imperativa é onde o estado mutável é armazenado e ler, assim, a ordenação e / ou duplicação de instruções do programa pode alterar o comportamento (semântica) do programa (e até mesmo causar um erro, o comportamento não intencional ou seja).

No sentido mais ingênuo e extrema (que afirmei na minha resposta anterior), programação declarativa (DP) é evitar todo o estado mutável armazenados, assim, a ordenação e / ou duplicação de instruções do programa pode NÃO alterar o comportamento (semântica) do programa.

No entanto, uma definição tão extrema não seria muito útil no mundo real, uma vez que quase todos os programas envolve armazenados estado mutável. O exemplo de planilha está em conformidade com esta definição extrema de DP, porque todo o código do programa é executado para conclusão com uma cópia estática do estado de entrada, antes que os novos estados são armazenados. Então, se qualquer estado é alterado, isto é repetido. Mas a maioria dos programas do mundo real não pode ser limitado a um modelo tão monolítica de alterações de estado.

Uma definição mais útil de DP é que a ordenação e / ou duplicação de instruções de programação não alteram qualquer semântica opacos. Em outras palavras, não são escondidos mudanças aleatórias na semântica occurring-- quaisquer alterações na ordem instrução de programa e / ou causa a duplicação só se destina e alterações transparentes para o comportamento do programa.

O próximo passo seria a conversa sobre que modelos de programação ou paradigmas ajuda na DP, mas isso não é a questão aqui.

Programação Declarativa está programando com declarações, sentenças ou seja declarativa. sentenças declarativas tem um número de propriedades que os distinguem de frases imperativas. Em particular, as declarações são:

  • comutativa (podem ser reordenadas)
  • associativa (podem ser agrupadas)
  • idempotent (pode repetir sem mudança de sentido)
  • monotônica (declarações não subtrair informações)

Um ponto relevante é que estas são todas as propriedades estruturais e são ortogonais assunto. Declarativa não é sobre "O vs. Como" . Podemos declarar (representam e restringir) a "como" tão facilmente como nós declaramos um "o que" . declarativa é sobre a estrutura, não de conteúdo. A programação declarativa tem um impacto significativo sobre a forma como abstrato e refatorar nosso código, e como nós modularize-lo em subprogramas, mas não tanto sobre o modelo de domínio.

Muitas vezes, podemos converter de imperativo declarativo adicionando contexto. Por exemplo. a partir de "Vire à esquerda. (... espere por isso ...) vire à direita." para "Bob vai virar à esquerda no cruzamento de Foo e Bar at 11:01. Bob vai virar à direita no cruzamento da Bar e Baz às 11:06." Note-se que neste último caso as frases são idempotent e comutativa, enquanto que no primeiro caso, reorganizando ou repetindo as frases mudaria drasticamente o significado do programa.

Em relação monotônica , declarações pode adicionar restrições que subtrair possibilidades . Mas as restrições ainda adicionar informações (mais precisamente, as restrições são informações). Se precisarmos de declarações variáveis ??no tempo, é típico para modelar isso com semântica temporal explícitas - por exemplo, de "a bola é plana" para "a bola é plana no tempo T". Se temos duas declarações contraditórias, temos um sistema declarativo inconsistente, embora isso possa ser resolvido através da introdução de suaves restrições (prioridades, probabilidades, etc.) ou aproveitando uma lógica paraconsistente.

A programação declarativa é "o ato de programação em idiomas que estão em conformidade com o modelo mental do desenvolvedor ao invés do modelo operacional da máquina".

A diferença entre a programação declarativa e imperativa está bem ilustrado pelo problema da análise de dados estruturados.

Um programa imperativo usaria mutuamente funções recursivas consumir entrada e gerar dados. Um programa declarativa expressaria uma gramática que define a estrutura dos dados de modo que possa então ser analisado.

A diferença entre essas duas abordagens é que o programa declarativa cria uma nova linguagem que é mais estreitamente mapeado para o modelo mental do problema que é a sua língua de acolhimento.

Pode parecer estranho, mas eu gostaria de acrescentar Excel (ou qualquer planilha realmente) para a lista de sistemas declarativas. Um bom exemplo disto é dado aqui .

Eu explicá-lo como DP é uma forma de expressar

  • A expressão meta , as condições para - o que está procurando. Existe um, talvez ou muitos?
  • Alguns fatos conhecidos
  • As regras que ampliam os fatos Know

... e onde há um mecanismo de dedução geralmente trabalhando com um unificação algoritmo para encontrar as metas.

Tanto quanto eu posso dizer, que começou a ser usado para descrever sistemas como o Prolog de programação, porque prólogo é (supostamente) sobre declarar as coisas de uma maneira abstrata.

É cada vez mais significa muito pouco, já que tem a definição dada pelos usuários acima. Deve ficar claro que há um abismo entre a programação declarativa de Haskell, contra a programação declarativa de HTML.

Um par de outros exemplos de programação declarativa:

  • ASP.Net marcação para ligação de dados. Ele apenas diz "preencher essa grade com essa fonte", por exemplo, e deixa-lo para o sistema de como isso acontece.
  • Linq expressões

A programação declarativa é bom porque ele pode ajudar simplificar o seu modelo mental * de código e porque ele pode, eventualmente, ser mais escalável.

Por exemplo, digamos que você tem uma função que faz algo para cada elemento em uma matriz ou lista. código tradicional ficaria assim:

foreach (object item in MyList)
{
   DoSomething(item);
}

Não é grande coisa lá. Mas o que se você usar a sintaxe mais-declarativa e em vez disso definir DoSomething () como uma ação? Então você pode dizer desta maneira:

MyList.ForEach(DoSometing);

Este é, naturalmente, mais concisa. Mas tenho certeza de que você tem mais preocupações do que apenas salvar duas linhas de código aqui e ali. Desempenho, por exemplo. A velha maneira, o processamento tinha de ser feito em sequência. E se o método .ForEach () tinha uma forma de você para sinalizar que ele poderia lidar com o processamento em paralelo, automaticamente? Agora, de repente, você fez seu código multi-threaded de uma forma muito segura e só mudou uma linha de código. E, de fato, há um um extensão para .Net que permite que você faça exatamente isso.

  • Se você seguir esse link, que leva você a um post no blog de um amigo meu. Todo o post é um pouco longo, mas você pode rolar para o título intitulado "O Problema" _e buscá-lo há nenhum problema. *

Depende de como você enviar a resposta para o texto. Em geral você pode olhar para o programa em uma certa visão, mas isso depende o ângulo que você olhar para o problema. I irá ajudar a começar com o programa: Dim ônibus, carro, Time, altura que Integr

Mais uma vez, depende do que o problema é uma geral. Você pode ter que encurtar devido ao programa. Espero que isso ajude e precisam do feedback se isso não acontece. Obrigado.

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