Gerando número Randomico

 

Embora não seja algo que precisamos todo dia, é algo que precisamos com certa frequência, seja para gerar senha , arquivo ou mesmo para outros fins…

Vamos utilizar a classe random, podemos ainda passar um intervalo para que o número seja gerado, assim podemos dizer por exemplo para que seja gerado um numero entre 0 e 100.

Dim RandomClass As New Random()

RandomClass.Next(0, 100)

Você pode utilizar também o método NextDouble para retornar um número entre 0.0 e 1.0

Vale lembrar que por mais que o range de número possa ser grande , como de 0 a 999999 a chance de um número repetido não é tão pequeno assim … quando não se pode correr o risco de número repetidos é melhor utilizar mais alguns truques como adicionar o id do usuário por exemplo …

IF X Case (Coitado do nosso querido IF)

 

Hoje vamos mostrar como a estrutura case é mais produtiva do que o bom e velho if, vamos construir um método para qualificar um número de acordo com os dados abaixo:

  • Número Bom quando for igual a 2,5 ou 7
  • Número Ruim quando for igual a 1,3,8,9 ou 10
  • Número Péssimo quando o número for menor que 1
  • Número Muito Bom quando o número for igual a 4,6 ou maior que 10
  • Número Excelente quando o número for maior ou igual que 20 e menor que 100
  • Se diferente de todas acima, número é inválido

 

Function RetornarClassificacao(byval variavel As Int32) As String

  Dim Classificacao As String

        If (variavel = 2) OrElse (variavel = 5) OrElse (variavel = 7) Then

            Classificacao = "Número Bom"

        ElseIf (variavel = 1) OrElse (variavel = 3) OrElse ((variavel >= 8) AndAlso (variavel <= 10)) Then

            Classificacao = "Número Ruim"

        ElseIf (variavel < 1) Then

            Classificacao = "Número Péssimo"

        ElseIf (variavel = 4) OrElse (variavel = 6) OrElse ((variavel > 10) AndAlso (variavel < 20)) Then

            Classificacao = "Número Muito Bom"

        ElseIf (variavel >= 20) AndAlso (variavel < 100) Then

            Classificacao = "Número Excelente"

        Else

            Classificacao = "Número inválido"

        End If

return Classificacao

End Function

Agora veja como o código fica bem mais legivel e fácil utilizando o Case, se nosso código fica bem melhor nesse caso simples, imagine com códigos mais complexos

 

Function RetornarClassificacao(byval variavel As Int32) As String

Dim variavel As Int32 = txtResultado.Text

        Dim Classificacao As String

 

        Select Case variavel

            Case 2, 5, 7

                Classificacao = "Número Bom"

            Case 1, 3, 8 To 10

                Classificacao = "Número Ruim"

            Case Is < 1

                Classificacao = "Número Péssimo"

            Case 4, 6, 11 To 19

                Classificacao = "Número Muito Bom"

 

            Case 20 To 99

                Classificacao = "Número Excelente"

            Case Else

                Classificacao = "Número inválido"

        End Select

return Classificacao

End Function

 

O  código com if requer uns 10 a 20 segundos para ser totalmente entendido, já o case dúvido que tenha demorado mais de 5 segundos para saber o que está sendo feito, a  utilização do 11 to 19 para identificar uma sequência é fantastico e a virgula para as varias condições então nem se fala…

É claro que o poderoso Case tinha que ter um defeito, esse defeito é que ele só compara uma variavel,ou seja, se tivesse uma comparação do tipo a =1 e b = 2 , não conseguiria fazer essas duas comparações com o case, precisaria usar o IF a não ser que criasse alguma "solução avançada" para contornar isso.

 

 

JavaScript – Fechar Janela sem confirmação

Essa é um dos pedidos mais solicitados pelos clientes, por algum tempo pensou-se que não era possível não exibir a mensagem de confirmação quando se tenta fechar uma janela que não foi aberta usando javascript …
Felizmente algum doido achou uma solução, a solução original não funcionava 100% com os novos navegadores …
Mas como sou Brasileiro e não desisto nunca …rs… consegui chegar em uma solução que funciona no IE 6 e 7, funcionava no 
 firefox 1.5 no 2.0 não testei ainda
 

function fecharJanela(){

  window.opener=’X’;window.open(”,’_parent’,”);window.close();

}

.NET Usando TryParse par criar isNumeric e isDate

Esse código visa implementar um método puro .NET semelhante ao isNumeric e isDate do vb 6 para que possa ser utilizados em seus projetos .Net. Estamos utilizando o método TryParse que retorna true quando a conversão para o tipo especifico seja possível e false quando não for possível.

Public Shared Function IsNumeric(ByVal Expression As Object) As Boolean

Dim isNum As Boolean

Dim retNum As Double

isNum =

Double.TryParse(Convert.ToString(Expression), System.Globalization.NumberStyles.Any, System.Globalization.NumberFormatInfo.InvariantInfo, retNum)

 

Return isNum

End Function

 

 

Public Shared Function IsDate(ByVal Expression As Object) As Boolean

Dim _isDate As Boolean

Dim retDate As DateTime

_isDate = DateTime.TryParse(Convert.ToString(Expression), retDate)

 

Return _isDate

End Function

Tutorial ASP.NET 2.0 – Orientação a Objeto adicionando regras de negócio a nossa classe

Antes de adicionar regras de negócio a nossa classe, vamos analisar o que fizemos para chamar nossa classe

Dim oProduto As New Produto

Estamos criando a instância do objeto, que é conhecida como classe, repare na utilização da palavra new é ela que diz que demos criar nova instância do objeto Produto. Uma observação importante é que se tivéssemos criando um tipo de dado (int,string,datetime,etc) a palavra new não seria utilizada.

No trecho abaixo preenchemos as propriedades com o valores digitados no formulário

oProduto.DataFabricacao = txtDataFabricacao.Text

oProduto.Nome = txtNome.Text

oProduto.NumeroDias = txtNumeroDias.Text

E por último vamos chamar o método para calcular a data de validade

lblResultado.Text = oProduto.RetornaDataValidade()

Agora vamos adicionar algumas regras de negócio ao nosso método RetornaDataValidade:

  1. A quantidade de dias de validade deve estar entre 5 e 90 dias até o mês 6 do ano, do mês 7 ao mês 12 a quantidade de dias deve estar entre 10 e 70 dias.
  2. Para quantidades entre 15 e 30 dias, deve ser acrescentado 20% ao resultado final.

Com as regras nosso método ficaria assim:

Function RetornaDataValidade() As String

Dim retorno As String

Dim qtdDias As Integer = NumeroDias

‘Para quantidades entre 15 e 30 dias , deve ser acrescentado 20% ao resultado final.

If ((qtdDias > 14) AndAlso (qtdDias < 71)) Then qtdDias = qtdDias * 1.2

If (DataFabricacao.Month < 7) Then

‘5 e 90 dias até o mês 6 do ano

If ((NumeroDias > 4) AndAlso (NumeroDias < 91)) Then

retorno = DataFabricacao.AddDays(qtdDias)

Else

retorno = "Numero de dias deve estar entre 5 e 90"

End If

Else

‘Mês 7 ao mês 12 a quantidade de dias deve estar

If ((NumeroDias > 4) AndAlso (NumeroDias < 91)) Then

retorno = DataFabricacao.AddDays(qtdDias)

Else

retorno = "Numero de dias deve estar entre 10 e 70"

End If

End If

Return retorno

End Function

Para podermos enviar uma mensagem foi alterado o retorno do método para string

De Function RetornaDataValidade() As DateTime

Para Function RetornaDataValidade() As String

Outro ponto interessante é o trecho abaixo, onde podemos notar que não utilizamos o end if, isso foi possível por que só temos uma linha de comando dentro do if (qtdDias = qtdDias * 1.2), se tivéssemos duas linhas ou mais , o end if seria obrigatório.

If ((qtdDias > 14) AndAlso (qtdDias < 71)) Then qtdDias = qtdDias * 1.2

Agora rode a aplicação e informe os valores diferentes para ver o funcionamento das regras criadas.

 

Tutorial ASP.NET 2.0 – Orientação a Objeto Usando a Classe criada

 

Agora vamos usar a classe produto que criamos, para isso vamos criar um formulário para informar os valores das propriedades e chamar o método.

Adicione 5 label, 4 textbox e um botão

Agora vamos configurar a propriedade ID e Text de cada objeto

Tipo Objeto

ID

Text

Label

lblNome

Nome

Label

lblPreco

Preço

Label

lblDataFabricao

Data Fabricação

Label

lblNumeroDias

Dias Validade

Label

lblValidade

 

TextBox

txtNome

 

TextBox

txtPreco

 

TextBox

txtDataFabricao

 

TextBox

txtNumeroDias

 

Botão

btnEnviar

Enviar

Obs: Repare que adotamos um prefixo para cada tipo de objeto

O formulário deve esta semelhante ao abaixo:

Veja o código HTML

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="CursoASPNET._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;

<html xmlns="http://www.w3.org/1999/xhtml&quot; >

<head runat="server">

<title>Untitled Page</title>

</head>

<body>

<form id="form1" runat="server">

<div>

<asp:Label ID="lblNome" runat="server" Text="Nome"></asp:Label>

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />

<asp:Label ID="lblPreco" runat="server" Text="Preço"></asp:Label>

<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br />

<asp:Label ID="lblDataFabricacao" runat="server" Text="Data Fabricação"></asp:Label>

<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox><br />

<asp:Label ID="lblNumeroDias" runat="server" Text="Dias Validade"></asp:Label>

<asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>

<asp:Button ID="btnEnviar" runat="server" Text="Enviar" /><br />

<asp:Label ID="lblResultado" runat="server" Width="191px"></asp:Label></div>

</form>

</body>

</html>

Agora vamos criar o código que será chamado no click do botão enviar, para isso primeiro de um duplo click no botão enviar.

Observação: Caso você não esteja no modo design, no rodapé clique em Design.

Será criado o código abaixo:

Protected Sub btnEnviar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnviar.Click

End Sub

Agora vamos criar nosso código para instanciar a classe e utiliza-la.

Protected Sub btnEnviar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnviar.Click

Dim oProduto As New Produto

oProduto.DataFabricacao = txtDataFabricacao.Text

oProduto.Nome = txtNome.Text

oProduto.NumeroDias = txtNumeroDias.Text

lblResultado.Text = oProduto.RetornaDataValidade()

End Sub

Vamos rodar nosso projeto (ctrl + f5) preencher o formulário e clicar em enviar.

Como não temos nenhum tratamento de erro, devemos informar os dados corretamente, nos próximos capítulos estaremos melhorando o código.

A aparência também não é das melhores, por enquanto não se preocupe com esse pequeno detalhe, estaremos em breve aplicando CSS para melhorar a aparência do nosso formulário.

Tutorial ASP.NET 2.0 – Orientação a Objeto Criando nossa primeira classe

Agora vamos criar uma classe produto para mostrarmos melhor o conceito de orientação a objeto.

Nossa classe produto terá quatro propriedades e um método.

Propriedades

  • Nome
  • Preço
  • Data Fabricação
  • Dias Validade

Método

  • Retornar Data Validade
Criando uma classe

Clique com o botão direito do mouse no projeto/Website e selecione add à New Item

Selecione class e digite produto.vb , clique em Add

Foi criado um arquivo somente com a definição da classe.

Public Class Produto

End Class

Vamos agora adicionar as propriedades e o método, para criar a propriedade clique com o botão direito dentro do arquivo, selecione Insert Snippet

Usando o Insert Snippet

Selecione Common Code Patterns à Properties and Procedures à Define a Property

Será criado o código Abaixo:

Public Class Produto

Private newPropertyValue As Integer

Public Property NewProperty() As Integer

Get

Return newPropertyValue

End Get

Set(ByVal value As Integer)

newPropertyValue = value

End Set

End Property

End Class

Agora vamos alterar o nome e tipo da propriedade

Public Class Produto

Private _nome As String

Public Property Nome() As String

Get

Return _nome

End Get

Set(ByVal value As String)

_nome = value

End Set

End Property

End Class

Agora repita os passos anteriores para criar as outras propriedades, veja o código como deve ficar.

Public Class Produto

Private _nome As String

Public Property Nome() As String

Get

Return _nome

End Get

Set(ByVal value As String)

_nome = value

End Set

End Property

Private _DataFabricacao As DateTime

Public Property DataFabricacao() As DateTime

Get

Return _DataFabricacao

End Get

Set(ByVal value As DateTime)

_DataFabricacao = value

End Set

End Property

Private _NumeroDias As Integer

Public Property NumeroDias() As Integer

Get

Return _NumeroDias

End Get

Set(ByVal value As Integer)

_NumeroDias = value

End Set

End Property

Private _Preco As Double

Public Property Preco() As Double

Get

Return _Preco

End Get

Set(ByVal value As Double)

_Preco = value

End Set

End Property

End Class

Agora vamos criar nosso método

Function RetornaDataValidade() As DateTime

Return DataFabricacao.AddDays(NumeroDias)

End Function

Nesse método utilizamos a propriedade DataFabricacao e NumeroDias , como DataFabricacao é do tipo data, temos o método de soma para dia AddDays.

Nossa classe já pode ser utilizada em nossa página:

Public Class Produto

Private _nome As String

Public Property Nome() As String

Get

Return _nome

End Get

Set(ByVal value As String)

_nome = value

End Set

End Property

Private _DataFabricacao As DateTime

Public Property DataFabricacao() As DateTime

Get

Return _DataFabricacao

End Get

Set(ByVal value As DateTime)

_DataFabricacao = value

End Set

End Property

Private _NumeroDias As Integer

Public Property NumeroDias() As Integer

Get

Return _NumeroDias

End Get

Set(ByVal value As Integer)

_NumeroDias = value

End Set

End Property

Private _Preco As Double

Public Property Preco() As Double

Get

Return _Preco

End Get

Set(ByVal value As Double)

_Preco = value

End Set

End Property

Function RetornaDataValidade() As DateTime

Return DataFabricacao.AddDays(NumeroDias)

End Function

End Class

 

Tutorial ASP.NET 2.0 – Introdução Orientação a Objeto

 

No DotNet tudo é um objeto, com isso temos uma grande reutilização de código e facilidade em melhorar os controles e objetos de acordo com nossa necessidade. Nunca devemos nos esquecer disso para tirar o máximo de proveito.

Dito isso vamos analisar novamente o código de nossa primeira página.

Partial Public Class _Default

Na linha acima estamos definindo o nome de nossa classe, _Default, a visibilidade, Public, e a plavra Partial, especifica que a classe será composta por mais de um arquivo.

Inherits System.Web.UI.Page

Estamos definindo que nossa classe _Default esta herdando da Classe Page, vale lembrar que só podemos herdar de uma classe.

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

Estamos definindo o método load da página, definindo que o mesmo está protegido, ou seja, não pode ser “substituído” por outro, caso criarmos outra página que herde de nossa classe _Default.

Esse método recebe um objeto que representa quem chamou esse método e a lista de parâmetros enviada.

Partial Public Class _Default

Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

Dim Mensagem As String = ""

Response.Write("Ola mundo!")

End Sub

End Class

 

Tutorial ASP.NET 2.0 – Analisando o HTML da página Ola Mundo

 

Agora vamos analisar o código da página default.aspx:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="CursoASPNET._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
<html xmlns="http://www.w3.org/1999/xhtml&quot; >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<div>
</div>
</form>
</body>
</html>

Em relação a uma página HTML temos os elementos a mais:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="CursoASPNET._Default" %>

Estamos especificando qual é a linguagem Language="vb"

Qual o arquivo que o código será armazenado CodeBehind="Default.aspx.vb"

Qual a classe Inherits="CursoASPNET._Default"

Define se os eventos serão associados automaticamente aos objetos AutoEventWireup="false" , valor false devemos criar os eventos , true eles serão criados automaticamente.

Na prática isso quer dizer que AutoEventWireup="false" requer

Handles Me.Load , já se o valor fosse true AutoEventWireup="true"

o Handles me.load seria opcional.

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

Response.Write("AutoEventWireup=False")

End Sub

O ideal é utilizar o valor false para uma melhor performance.

 

O restante do código é html normal com exceção da tag ScriptManager que é responsavel pelo gerenciamento das chamadas Ajax:

<asp:ScriptManager ID="ScriptManager1" runat="server" />