Código Limpo

Embed Size (px)

DESCRIPTION

Como criar código claro, limpo e legível, que comunique a intenção do programador ao escrevê-lo.

Citation preview

  • 1. Cdigo Limpo Gustavo Rezende

2. Especificao cdigo 3. Um cdigo limpo simples e direto.Ele to bem legvel quanto uma prosa bem escrita. Ele jamais torna confuso o objetivo do desenvolvedor, em vez disso, ele est repleto de abstraes claras e linhas de controle objetivas. Grady Booch 4. Alm de seu criador, um desenvolvedor pode ler e melhorar um cdigo limpo. Ele tem testes de unidade e de aceitao, nomes significativos; ele oferece apenas uma maneira, e no vrias, de se fazer uma tarefa; possui poucas dependncias, as quais so explicitamente declaradas e oferecem uma API mnima e clara.O cdigo deve ser inteligvel j que dependendo da linguagem, nem toda informao necessria pode expressar no cdigo em si. Dave Thomas 5. Robert C. Martin 6. Qual a diferena entre um cdigo limpo e um mal organizado? 7. 8. :-(SujoXlimpo:-) 9. Mantenha-selimpo 10. 11.

  • Nomes Significativos

12. Use nomes que revelam seu Propsito. D=1 #tempo decorrido em dias Int elapsedTimeInDays; Int daysSinceCreation; Int fileAgeInDays; 13. Evite Informaes Erradas. accountList accountGroup bunchOfAccounts accounts 14. A Notao Hngara. Phone String= PhoneNumber() Account List= () Account List .append( account ) o nome no mudana alterao do tipo 15. Faa Disties Significativas. getActiveAccount() getActiveAccounts() getActiveAccountInfo() getActiveAccountData() 16. Selecione uma Palavra por Conceito. pegar recuperar obter 17. Faa Distines Significativas. defgetThem(): list1 = [] forx in self.the_list: ifx[0] == 4: list1.append(x) returnlist1 18. Faa Distines Significativas. defgetFlaggedCells(): flagged_cells = [] forcell in self.game_board: ifcell.is_flagged() flagged_cells.append(cell) returnflagged_cells 19. Use Nomes Pronunciveis. Genymdhms generationTimestampModymdhms modificationTimestamp 20. Mtodos. Mtodos pequenos. Faa Apenas uma Coisa. 21. defprocess(): self.input() self.count += 1 self.output() Faa Apenas uma Coisa. 22. defprocess(): self.input() self.increment_count() self.output() Simetria. 23. defprocess(): self.input() self.tally() self.output() Simetria. 24. Parmetros de Mtodos. defcriar_circulo(x, y, raio): ... defcriar_circulo(centro, raio): raio = 3.0 centro = Ponto(1.1, 3.8) circulo = criar_circulo(centro, raio) 25. Evite Efeitos Colaterais. ... defcheck_password( self , user, password): codedPhrase= user.getPhraseEncodedBuPassword()phrase = cryptographer.decrypt( codedPhrase, password) if Valid Password ==phrase: self .session = Session.initialize() return True return False ... 26. Cdigo intil ... #import pdb; pdb.set_trace() ... defcheck_password( self , user, password): codedPhrase=self. user. / getPhraseEncodedBuPassword()phrase =self. cryptographer.decrypt( codedPhrase, password) ifValid Password==phrase: # self.session = Session.initialize() return True return False ... 27. Organizando modulos e Classes. 28. Organizao importimportes CONSTANTES = Nonevariaveis_globais = False classClassName(object): CONSTANTES = Nonepublica ="variaveis pulicas" _privado = None def__init__( self ,): pass defmetodos_publicos( self ): pass def_metodos_privados( self ): pass 29. As classes devem ser pequenas 30. Comentrios ... defextractorRegion( self ,filename=None, data=None, **args): """ Extractor Rich Rock Methods Sun Shine """ GranulateObj =self .__process( filename=filename, data=data, **args) ifhasattr(GranulateObj, 'extractRegion'): returnGranulateObj.extractRegion() else : returnNone ... 31. Comentrios ... defextractorRegion( self ,filename=None, data=None, **args): """ Extractor Region """ GranulateObj =self .__process( filename=filename, data=data, **args) ifhasattr(GranulateObj, 'extractRegion'): returnGranulateObj.extractRegion() else : returnNone ... 32. Comentrios farFrame = frame + 1 #variavel que controla os frames seguintes a serem comparados com o atual e incrementada save = 1#a variavel save permanecendo com um o frame devera ser gravado #enquanto nao for o fim do vetor e nao forem analisados os 20 frames e o frame ainda pode ser gravado while(farFrame < len(vetImg))and(farFrame < (frame + 20))and(save == 1): frameDHistogram = self.createHistogramBoxes(vetImg, farFrame)#armazena o histograma do frame distante a ser comparado #diferenca do frame atual para o distante a ser analisado farDiference = self.calculateBoxesHistogramDiference(frameBHistogram, frameDHistogram) #se a diferenca dos histogramas dos frames for menor do que a sensibilidade nao gravar o frame if notself.potentialShot(farDiference, sensitivity): save = 0 33. Comentrios #if is Mac Os and is IE Browser and was Initialized if( "MAC"in platform.upper()and "IE"in browser.upper() andwasInitialized()andresize > 0): ... do something is_mac_os ="MAC" inplatform.upper() is_IE_browser ="IE" inbrowser.upper() was_resized = resize > 0 ifis_mac_osandis_IE_browserandwasInitialized()andwas_resized: . .. do something 34. 35. FIM Gustavo Rezende [email_address]