SlideShare uma empresa Scribd logo
"STRUCTured" TYPE CODES
@tonicospinelli
STRUCTured Type Codes
"STRUCTured" TYPE CODES
Type Code
Conjunto de caracteres/números que formam uma
lista de valores permitidos para alguma entidade.
Frequentemente nomeados através de constantes.
Const VS Struct
+ Struct nos permite adicionar comportamento
"STRUCTured" TYPE CODES
Problema
Uma struct possui um field que é um
Type Code e não é utilizado em:
condições do operador
não afetam o comportamento do programa
"STRUCTured" TYPE CODES
Solução
Através de uma struct, usar suas instâncias
ao invés dos Type Codes
Atribuições mais seguras!
"STRUCTured" TYPE CODES
Estrutura Ilustrativa
Status: string
StatusInitial: string
StatusWaiting: string
StatusPaid: string
StatusCancelled: string
Payment
"STRUCTured" TYPE CODES
Proposta
Payment
Status: Status
Status
Initial: string
Waiting: string
Paid: string
Cancelled: string
"STRUCTured" TYPE CODES
Código
const(
StatusInitial = "Initial"
StatusWaiting = "Waiting"
)
type Payment struct {
Status string
}
func (p *Payment) changeStatusTo(status string){
p.status = status
}
func (p *Payment) ChangeStatusToWaiting() {
p.changeStatusTo(StatusWaiting)
}
"STRUCTured" TYPE CODES
object calisthenics: Envolva seus tipos primitivos
type Status string
const(
Initial Status = "Initial"
...
)
type Payment struct {
status Payment
}
"STRUCTured" TYPE CODES
acrescentar comportamentos
type Status string
func (s Status) Equals(status Status) bool {
return s == status
}
func (s Status) IsClosed() bool {
return s.Equals(Paid) && s.Equals(Cancelled)
}
"STRUCTured" TYPE CODES
tipos elegantes com IOTA
type Status int
const (
Initial = iota
Waiting
...
)
var labels = [...]string{"Initial", "Waiting"}
func (s Status) String() string {
return labels[s]
}
func (s Status) IsClosed() bool {
return (Paid|Cancelled)&s != 0
}
"STRUCTured" TYPE CODES
tipos elegantes com IOTA
// comparação com string
func (s Status) IsClosed() bool {
return s.Equals(Paid) && s.Equals(Cancelled)
}
// usando int podemos usar operação BITWISE
func (s Status) IsClosed() bool {
return (Paid|Cancelled)&s != 0
}
"STRUCTured" TYPE CODES
var labels = [...]string{"Initial", "Waiting"}
func Parse(status string) (Status, error) {
for k, label := range labels {
if label == status {
return Status(k), nil
}
}
return Initial, fmt.Errorf("status %s not supported", status)
}
"STRUCTured" TYPE CODES
tipos elegantes com IOTA
serialização
// database/sql/sql.Scanner interface
func (s *Status) Scan(src interface{}) error {}
// database/sql/driver/types.Valuer interface
func (s Status) Value() (driver.Value, error) {}
// encoding/json/encode.JSON interface
func (s Status) MarshalJSON() ([]byte, error) {}
// encoding/json/decode.JSON interface
func (s *Status) UnmarshalJSON(data []byte) error {}
"STRUCTured" TYPE CODES
Desvantagem
Requer mais código do que usar tipo primitivo
Vantagens
Diminui programação defensiva
Protege contra atribuições inválidas e
comparações
"STRUCTured" TYPE CODES
Obrigado!
@tonicospinelli

Mais conteúdo relacionado

PDF
Javascript Recuperando Dados De Formularios
PPTX
PPTX
ORM: Sendo produtivo com NHibernate
PDF
Substituir Type Codes "com" Classe
PDF
Cheat sheet - String Java (Referência rápida)
PDF
Passagem de Objetos entre Java e Oracle
ODP
App scala
Javascript Recuperando Dados De Formularios
ORM: Sendo produtivo com NHibernate
Substituir Type Codes "com" Classe
Cheat sheet - String Java (Referência rápida)
Passagem de Objetos entre Java e Oracle
App scala

Semelhante a STRUCTured Type Codes (10)

PPT
Unidade4.1 Oracle Or
 
PPTX
Curso de PostgreSQL: Um pouco Além dos Comandos
PPTX
Desenvolvendo com Silverlight para WP7 Mango [Update]
PDF
Sobrecarga operadores
PPTX
Algoritmos e Estrutura de Dados - Aula 03
PDF
Introdução a JavaScript
PPTX
Curso de Java Capítulo 2 - Aprendendo Novas Técnicas
PPTX
As Novidades Do C# 4.0 - NetPonto
PPTX
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
PPT
C++ Standard Template Library
Unidade4.1 Oracle Or
 
Curso de PostgreSQL: Um pouco Além dos Comandos
Desenvolvendo com Silverlight para WP7 Mango [Update]
Sobrecarga operadores
Algoritmos e Estrutura de Dados - Aula 03
Introdução a JavaScript
Curso de Java Capítulo 2 - Aprendendo Novas Técnicas
As Novidades Do C# 4.0 - NetPonto
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
C++ Standard Template Library
Anúncio

Último (19)

PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PDF
Processos na gestão de transportes, TM100 Col18
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Apple Pippin Uma breve introdução. - David Glotz
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Aula04-Academia Heri- Tecnologia Geral 2025
Processos na gestão de transportes, TM100 Col18
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Aula 18 - Manipulacao De Arquivos python
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
COBITxITIL-Entenda as diferença em uso governança TI
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Custos e liquidação no SAP Transportation Management, TM130 Col18
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Apple Pippin Uma breve introdução. - David Glotz
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Anúncio

STRUCTured Type Codes

  • 3. "STRUCTured" TYPE CODES Type Code Conjunto de caracteres/números que formam uma lista de valores permitidos para alguma entidade. Frequentemente nomeados através de constantes.
  • 4. Const VS Struct + Struct nos permite adicionar comportamento "STRUCTured" TYPE CODES
  • 5. Problema Uma struct possui um field que é um Type Code e não é utilizado em: condições do operador não afetam o comportamento do programa "STRUCTured" TYPE CODES
  • 6. Solução Através de uma struct, usar suas instâncias ao invés dos Type Codes Atribuições mais seguras! "STRUCTured" TYPE CODES
  • 7. Estrutura Ilustrativa Status: string StatusInitial: string StatusWaiting: string StatusPaid: string StatusCancelled: string Payment "STRUCTured" TYPE CODES
  • 8. Proposta Payment Status: Status Status Initial: string Waiting: string Paid: string Cancelled: string "STRUCTured" TYPE CODES
  • 9. Código const( StatusInitial = "Initial" StatusWaiting = "Waiting" ) type Payment struct { Status string } func (p *Payment) changeStatusTo(status string){ p.status = status } func (p *Payment) ChangeStatusToWaiting() { p.changeStatusTo(StatusWaiting) } "STRUCTured" TYPE CODES
  • 10. object calisthenics: Envolva seus tipos primitivos type Status string const( Initial Status = "Initial" ... ) type Payment struct { status Payment } "STRUCTured" TYPE CODES
  • 11. acrescentar comportamentos type Status string func (s Status) Equals(status Status) bool { return s == status } func (s Status) IsClosed() bool { return s.Equals(Paid) && s.Equals(Cancelled) } "STRUCTured" TYPE CODES
  • 12. tipos elegantes com IOTA type Status int const ( Initial = iota Waiting ... ) var labels = [...]string{"Initial", "Waiting"} func (s Status) String() string { return labels[s] } func (s Status) IsClosed() bool { return (Paid|Cancelled)&s != 0 } "STRUCTured" TYPE CODES
  • 13. tipos elegantes com IOTA // comparação com string func (s Status) IsClosed() bool { return s.Equals(Paid) && s.Equals(Cancelled) } // usando int podemos usar operação BITWISE func (s Status) IsClosed() bool { return (Paid|Cancelled)&s != 0 } "STRUCTured" TYPE CODES
  • 14. var labels = [...]string{"Initial", "Waiting"} func Parse(status string) (Status, error) { for k, label := range labels { if label == status { return Status(k), nil } } return Initial, fmt.Errorf("status %s not supported", status) } "STRUCTured" TYPE CODES tipos elegantes com IOTA
  • 15. serialização // database/sql/sql.Scanner interface func (s *Status) Scan(src interface{}) error {} // database/sql/driver/types.Valuer interface func (s Status) Value() (driver.Value, error) {} // encoding/json/encode.JSON interface func (s Status) MarshalJSON() ([]byte, error) {} // encoding/json/decode.JSON interface func (s *Status) UnmarshalJSON(data []byte) error {} "STRUCTured" TYPE CODES
  • 16. Desvantagem Requer mais código do que usar tipo primitivo Vantagens Diminui programação defensiva Protege contra atribuições inválidas e comparações "STRUCTured" TYPE CODES