Skip to content

Instantly share code, notes, and snippets.

@HiroNakamura
Last active September 12, 2020 17:56
Show Gist options
  • Select an option

  • Save HiroNakamura/4478282 to your computer and use it in GitHub Desktop.

Select an option

Save HiroNakamura/4478282 to your computer and use it in GitHub Desktop.
Ejemplos en Scala, algunos los hice y otros son recopilacion
object DynamicElvis {
class DynamicImpl( x: AnyRef ) extends Dynamic {
def _select_(name: String): DynamicElvis = {
val mName = name.substring(0, name.length - 1 )
val mVal = x.getClass.getMethod(mName).invoke( x )
new DynamicElvis( if( mVal != null ) Some( mVal ) else None )
}
def _invoke_(name: String)(args: Any*) = {
error("unsupported")
}
}
trait Elvis extends Dynamic{
def _select_(name: String): DynamicElvis = {
val mName = name.substring(0, name.length - 1 )
val mVal = this.getClass.getMethod(mName).invoke( this )
new DynamicElvis( if( mVal != null ) Some( mVal ) else None )
}
def _invoke_(name: String)(args: Any*) = {
error("unsupported")
}
}
class DynamicElvis( x: Option[AnyRef] ) extends Dynamic {
def _select_(name: String): DynamicElvis = {
if( name.endsWith( "Q" ) ){
val mName = name.substring( 0, name.length - 1 )
new DynamicElvis(
x.flatMap{ cVal =>
val nVal = cVal.getClass.getMethod(mName).invoke( cVal )
if( nVal != null ) Some( nVal ) else None } )
}
else{
error( name + "doesn't end with Q" )
}
}
def _invoke_(name: String)(args: Any*) = {
error("unsupported")
}
override def typed[T] : T = {
x match {
case Some( v ) => v.asInstanceOf[T]
case _ => null.asInstanceOf[T]
}
}
override def toString = "Dynamic(" + x.toString + ")"
}
implicit def toDynamic( x :Any ): Dynamic = new DynamicImpl( x.asInstanceOf[AnyRef] )
class Person( adr :Adress ){
def adress = adr
}
class Adress( c :City ){
def city = c
}
class City( c :String ){
def code = c
}
def getCode( p :Dynamic ){
println( p.adressQ.cityQ.codeQ.typed[String] )
}
def main( args :Array[String] ){
val p1 = new Person( new Adress( new Ort( "1111" ) ) )
val p2 = new Person( null ) with Elvis
getCode( p1 )
getCode( p2 )
println( p2.adressQ.ortQ.codeQ.typed[String] )
}
}
package ejemplo
import javax.swing.JOptionPane
import java.io.FileReader
import java.io.FileNotFoundException
import java.io.IOException
object Hola {
def main(args: Array[String]): Unit = {
println(testB())
testA()
testC()
testD()
testE()
}
def testE():Unit={
for( w <- 0 to 3){
println(w);
}
println("*****************************")
for( w <- 0 until 3){
println(w);
}
println("*****************************")
for( w <- 0 to 3; z<- 8 until 9 ) {
println("Valor de w:" +w);
println("Value de y:" +z);
}
println("*****************************")
val numeros = List(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30)
var cont = 0
for(cont <- numeros){
println(cont)
}
println("*****************************")
var diccionario = Map("A"->1, "B" -> 2, "C"->3)
println("Valor de A: "+diccionario("A"))
println("*****************************")
for ((k,v) <- diccionario){
printf("key: %s, value: %s\n", k, v)
}
println("*****************************")
var contador = 0
while(contador < 4){
println("Contador: "+contador)
contador = contador + 1
}
numeros.foreach{ println }
var suma:Int = 0
numeros.foreach{ suma+=_}
printf("Suma: %d\n",suma)
val vector = Vector("A","N","A"," ","M","A","R","I","A")
var concatenar:String =""
vector.foreach{ concatenar+=_ }
printf("%s\n",concatenar)
for (v <- vector if v.startsWith("A")){
println(v)
}
println("*****************************")
val numeral = (1 to 100000).toList
println("Suma: "+numeral.reduce{_+_})
val str:String = "FERROCARRILERO".toLowerCase()
printf("%s\n",str)
str.foreach{println}
println("*****************************")
for(i <- 1 to 3) println(i)
for(i <- 3 to 1) println(i)
for(i <- 5 to 1 by -1) println(i)
for(i <- 5 to 1 by -2) println(i)
for(i <- 1 to 5 by 2) println(i)
for(i <- 5 to 1 by 1) println(i)
println("*****************************")
val arrayInt = Array(1,2,3,4)
val arrayStr = Array("1","2","3","4")
arrayInt.foreach{println}
arrayStr.foreach{println}
println("*****************************")
val tupla = (123,"Juan Perez",true,'\u0021')
println("Tupla: "+tupla)
}
def testD():Unit={
val x: X = new X("Aldebaran de Casio")
println(x.nombre)
if(isX(x) == true){
println("Es de tipo X")
}
val y: Y = new Y("Fuller de Gilbrantad")
println(y.nombre)
val a = new A()
val b:B = new B()
try{
a.metodo()
b.metodo()
}catch{
case ex: Exception => {
println("Ha ocurrido una excepcion")
}
}
val z:Z = new Z("Juan Polinar Sanchez",true)
z.metodo()
//Esto no puede ser: atributos nombre y activo son private, no se puede acceder a ellos
//if(z.activo){
//printf("%s\n",z.nombre)
//}
if(z.isActivo()){
println("Nombre: "+z.getNombre())
}
println("***************************************")
val q = new Q("Ana")
printf("Nombre: %s\n",q.nombre)
q.setNombre("Maria")
println("Nombre: "+q.getNombre())
println("****************************************")
val hijaNoAbs:HijaNoAbs = new HijaNoAbs()
println("a: "+hijaNoAbs.a)
//Esto no se puede: MyTrait es abstracta:
//val myTrait = new MyTrait()
//println("a: "+myTrait.a)
val hijatrait:HijaTrait = new HijaTrait(2)
println("a: "+hijatrait.a)
println("****************************************")
ObjetoX.nombre ="Thomas Wayne"
ObjetoY.edad = 32
println("Nombre: "+ObjetoX.nombre)
ObjetoY.metodo()
//Esto no se puede:
//MyTrait.a = 22
//println("Valor de a: "+MyTrait.a)
println("****************************************")
val c1 = new MyCaseClass(122200L,"Torre 123","Dominique")
val c2 = new MyCaseClass(199900L,"Aldama 101","Benedictus")
val c3:MyCaseClass = new MyCaseClass(12222L,"Aldonjares 232","Romulo San Pedro")
val listaCaseClass = Array(c1,c2,c3)
println(c1)
println(c2)
println(c3)
println("****************************************")
listaCaseClass.foreach{println}
}
def testC(): Unit ={
JOptionPane.showMessageDialog(null,"Estas usando javax en Scala","Scala",JOptionPane.INFORMATION_MESSAGE)
try {
val f = new FileReader("archivo.dat")
}catch {
case ex: FileNotFoundException => {
println("El archivo no existe")
}
case ex: IOException => {
println("Una excepcion al leer el archivo")
}
}finally {
println("Hecho")
}
}
def testB(): String = {
"*** Programando en Scala como si fuera en primero ***"
}
def isX(x: Any): Boolean = x match {
case o: X => true
case _ => false
}
def testA():Unit={
var byte:Byte = 1
var corto:Short = 32
var entero:Int = 5
var cadena:String = "ABCD-1234"
var real:Double = 45.87
var flotante = 12.6f
var verdadero:Boolean = 34 > 22
var caracter:Character= '\u0099'
var largo:Long = 123344L
println("Byte: "+byte)
println("Short: "+corto)
println("Caracter: "+caracter)
println("Entero: "+entero)
println("Largo: "+largo)
println("Cadena: "+cadena)
println("Real: "+real)
println("Flotante: "+flotante)
println("Booleano: "+verdadero)
if(verdadero){
println("Esto es verdadero")
}
if(caracter == '$'){
println("Esto no se vera")
}else{
println("Esto si se vera")
}
if(!verdadero){
println("X")
} else if(corto == 32){
println("Y")
}else{
println("Z")
}
val opcion:Int = 1
var resultado:String=""
opcion match {
case 1 => resultado = "Alef"
case 2 => resultado = "Beth"
case 3 => resultado = "Gimmel"
case 4 => resultado = "Daleth"
case 5 => resultado = "Hei"
}
println(resultado)
val x = if (4 == 4) 1 else 0
val y = if (5<4) "Hola" else "Adios"
println("x: "+x)
println("y: "+y)
}
}
class X(val nombre:String)
class Y(override val nombre:String) extends X(nombre)
class A{
def metodo():Unit={
println("Metodo en A")
}
}
class B extends A{
override def metodo():Unit={
println("Metodo en B")
}
}
class Z(private val nombre:CharSequence, private val activo:Boolean){
def saludar():String={
"Hola, estoy en la clase Z"
}
def metodo():Unit={
println(saludar())
if(activo == true){
printf("Nombre: %s\n",nombre)
}
}
def getNombre():CharSequence={
nombre
}
def isActivo():Boolean={
activo
}
}
class Q(var nombre:String){
def setNombre(nombre:String):Unit={
this.nombre = nombre
}
def getNombre():String = {
nombre
}
def metodo():Unit={
println("Estoy en la clase Q")
}
}
abstract class Abstracta{
val a:Int = 0
}
class HijaNoAbs extends Abstracta{
override val a:Int=1
}
trait MyTrait {
var a: Int
}
class HijaTrait(var a: Int) extends MyTrait
object ObjetoX{
var nombre:String = ""
}
object ObjetoY{
var edad:Int = 0
def metodo():Unit={
printf("Edad: %d\n",edad)
}
}
case class MyCaseClass(clave:Long,direccion:String,nombre:CharSequence)
/**
* @file ScalaEjemplos
* @version 0.0.1
* @author Yo
* @date 06-diciembre-2013
* @url http://codemonkeyjunior.blogspot.mx/
* @description Ejemplos de código en Scala
*/
//11
object EjemploScala{
def main(args: Array[String]): Unit = {
val list = 0::"uno"::2::"tres"::4::"cinco"::Nil
list.foreach { elem => //por lo tanto, elem es tipo Any
elem match { //pero gracias a pattern matching...
case s:String => //podemos tener casos según el tipo de elem
println(s.toLowerCase())
case i:Int =>
println(2*i);
}
}
}
}
//10
object EjemploScala{
def main(args: Array[String]): Unit = {
Console.println(pulsaciones(32))
}
def pulsaciones(edad:Int): Double={
(220-edad)/15.0
}
}
//9
object EjemploScala{
def main(args: Array[String]): Unit = {
val nombres=List("alma","maria","hugo","yezmin")
nombres.foreach(n => println("hola "+n))
}
}
//8 case
object EjemploScala{
def main(args: Array[String]):Unit={
var opc:Int=0
Console.println("Hola elige una opcion:\n1. Iniciar\n2. Detener\n3. Reiniciar\n4. Estado\n (escribe el numero):")
opc=readInt
opc match {
case 1 => Console.println("Iniciando el proceso...")
case 2 => Console.println("Deteniendo el proceso...")
case 3 => Console.println("Reiniciando el proceso...")
case 4 => Console.println("Mostrar el estado del proceso...")
case _ => Console.println("No existe la opcion...")
}
}
}
//7
class Ventana(val ancho:Int,val alto:Int)
object EjemploScala{
def main(arg: Array[String]): Unit = {
val ventana= new Ventana(300,410)
Console.println("ancho: "+ventana.ancho)
Console.println("alto: "+ventana.alto)
}
}
//6
case class Ventana(val ancho:Int,val alto:Int)
object EjemploScala{
def main(arg: Array[String]): Unit = {
val ventana= Ventana(300,410)
Console.println("ancho: "+ventana.ancho)
Console.println("alto: "+ventana.alto)
}
}
//5
class Persona(val nombre:String,val edad:Int)
object EjemploScala{
def main(arg: Array[String]): Unit = {
val persona= new Persona("Fernando",32)
Console.println("nombre: "+persona.nombre)
Console.println("edad: "+persona.edad)
}
}
//4
case class Vehiculo(val puertas:Int, val color:String)
object EjemploScala{
def main(args: Array[String]): Unit = {
val miVehiculo = Vehiculo(4, "Verde")
Console.println("no. puertas:"+miVehiculo.puertas)
Console.println("color: "+miVehiculo.color)
}
}
//3 clase
class Vehiculo(val _puertasx:Int=2,val _colorx:String=null){
private var _puertas:Int=_puertasx
private var _color:String=_colorx
def puertas = _puertas
def puertas_= (value:Int):Unit = _puertas = value
def color=_color
def color_=(value:String):Unit=_color=value
}
object EjemploScala{
def main(args: Array[String]): Unit = {
val miVehiculo=new Vehiculo(4,"Verde")
Console.println("no. puertas: "+miVehiculo.puertas)
Console.println("color: "+miVehiculo.color)
}
}
// 2 clases
object EjemploScala {
def main(args: Array[String]):Unit={
val escalable=new Escalable("Torquemada")
Console.println("nombre: "+escalable.nombre)
}
}
class Escalable(val _nombrex:String=null){
private var _nombre:String=_nombrex
def nombre=_nombre
def nombre_=(value:String):Unit=_nombre=value
}
// conversor
object EjemploScala extends App{
val CAMBIO=13.3481
Console.println("Introduce dolares:")
var dolar:Double=readDouble
Console.println("valor (usd): "+dolar)
def resultado={
dolar*CAMBIO
}
Console.println("cambio (mxn):"+resultado)
}
// datasource: http://alvinalexander.com/scala/scala-jdbc-connection-mysql-sql-select-example
import java.sql.DriverManager
import java.sql.Connection
object Codemonkey {
def main(args: Array[String]) {
// connect to the database named "mysql" on the localhost
val driver = "com.mysql.jdbc.Driver"
val url = "jdbc:mysql://localhost/test"
val username = "root"
val password = "5432"
var connection:Connection = null
try {
Class.forName(driver)
connection = DriverManager.getConnection(url, username, password)
// create the statement, and run the select query
val statement = connection.createStatement()
val resultSet = statement.executeQuery("SELECT nombre,apellido_p,apellido_m FROM persona")
while ( resultSet.next() ) {
val nombre = resultSet.getString("nombre")
val apellido_p = resultSet.getString("apellido_p")
val apellido_m = resultSet.getString("apellido_p")
println("nombre: "+nombre+" , apellido paterno: "+apellido_p+" ,apellido materno: "+apellido_m)
}
} catch {
case e => e.printStackTrace
}
connection.close()
}
}
//223 datasource
object Codemonkey extends App{
import org.apache.commons.dbcp.BasicDataSource
val dataSource: DataSource = {
val ds = new BasicDataSource
ds.setDriverClassName("org.hsqldb.jdbc.JDBCDriver")
ds.setUsername("SA")
ds.setPassword("")
ds.setMaxActive(20);
ds.setMaxIdle(10);
ds.setInitialSize(10);
ds.setValidationQuery("SELECT 1 FROM INFORMATION_SCHEMA.SYSTEM_USERS")
new java.io.File("target").mkdirs // ensure that folder for database exists
ds.setUrl("jdbc:hsqldb:file:target/db/db")
ds
}
// test the data source validity
dataSource.getConnection().close()
// get the Slick database that uses the pooled connection
val database = Database.forDataSource(dataSource)
}
//220 object, revisar
object Codemonkey extends App{
import Servicios._
println("Introduce primer número:")
var num1:BigInt=readInt()
println("Introduce segundo número:")
var num2:BigInt=readInt()
println("número factorial de: "+num1+" ,es: "+factorial(num1))
println("número factorial de: "+num2+" ,es: "+factorial(num2))
try{
println("número combinatorio de "+num1+" y "+num2+" ,es:"+combinatorio(num1,num2))
}catch{
case e:Exception=>println("Error: "+e.toString+", causa: "+e.getCause)
}
}
object Servicios{
def factorial(n:BigInt):BigInt=if(n<0){1}else{n*factorial(n-1)}
def combinatorio(m:BigInt,n:BigInt):BigInt=factorial(m)/(factorial(n)*factorial(m-n))
}
//219object
object Codemonkey extends App{
import Factorial._
for(x <- 1 to 10){
println(factorial(x))
}
}
object Factorial{
def factorial(n:BigInt):BigInt={
if(n<0){
1
}else{
n*factorial(n-1)
}
}
}
//218 trait: http://www.tutorialspoint.com/scala/scala_traits.htm
object Codemonkey extends App{
val p1 = new Point(2, 3)
val p2 = new Point(2, 4)
val p3 = new Point(3, 3)
println(p1.isNotEqual(p2))
println(p1.isNotEqual(p3))
println(p1.isNotEqual(2))
}
trait Equal {
def isEqual(x: Any): Boolean
def isNotEqual(x: Any): Boolean = !isEqual(x)
}
class Point(xc: Int, yc: Int) extends Equal {
var x: Int = xc
var y: Int = yc
def isEqual(obj: Any) =
obj.isInstanceOf[Point] &&
obj.asInstanceOf[Point].x == x
}
//217 enumeraciones
import scala.util.control.Breaks._
object Codemonkey extends App{
import javax.swing.JOptionPane
var nombre:String=""
var direccion:String=""
var fecha:String=""
var sexo:String=""
var diaVisita:String=""
var problema:String=""
try{
do{nombre=JOptionPane.showInputDialog("Introduce nombre:")}while(nombre=="")
do{direccion=JOptionPane.showInputDialog("Introduce dirección:")}while(direccion=="")
do{fecha=JOptionPane.showInputDialog("Introduce fecha de nacimiento:")}while(fecha=="")
do{sexo=JOptionPane.showInputDialog("Introduce sexo: [m=Masculino, f=Femenino]")}while(sexo=="")
do{diaVisita=JOptionPane.showInputDialog("Introduce dia de visita:")}while(diaVisita=="")
do{problema=JOptionPane.showInputDialog("Introduce problema:")}while(problema=="")
var x:String=""
sexo match{
case "f" => x=Sexo.FEMENINO.toString()
case "m" => x=Sexo.MASCULINO.toString()
}
val paciente=new Paciente(nombre,direccion,new java.util.Date(fecha),Sexo.withName(x),new java.util.Date(diaVisita),problema)
var result:String=paciente.toString
JOptionPane.showMessageDialog(null,result,"Resultado",JOptionPane.PLAIN_MESSAGE)
}catch{case e:Exception=>JOptionPane.showMessageDialog(null, e.toString()+", causa: "+e.getCause(),"Ha ocurrido un error",JOptionPane.ERROR_MESSAGE)}
}
object Sexo extends Enumeration("MASCULINO","FEMENINO"){
//type tuSexo=Value
val MASCULINO,FEMENINO=Value
}
class Paciente(var nombrex:String=null, var direccionx:String=null,var fechaNacx:java.util.Date=null,var sexox:Sexo.Value,var diaVisitax:java.util.Date,var problemax:String=null){
private var _nombre:String=nombrex
private var _direccion:String=direccionx
private var _fechaNac:java.util.Date=fechaNacx
private var _sexo:Sexo.Value=sexox
private var _diaVisita:java.util.Date=diaVisitax
private var _problema:String=problemax
def nombre=_nombre
def nombre_=(value:String):Unit=_nombre=value
def direccion=_direccion
def direccion_=(value:String):Unit=_direccion=value
def fechaNac=_fechaNac
def fechaNac_=(value:java.util.Date):Unit=_fechaNac=value
def sexo=_sexo
def sexo_=(value:Sexo.Value):Unit=_sexo=value
def diaVisita=_diaVisita
def diaVisita_=(value:java.util.Date):Unit=_diaVisita=value
def problema=_problema
def problema_=(value:String):Unit=_problema=value
override def toString():String="nombre: "+nombre+",\ndireccion: "+direccion+",\nfecha de nacimiento: "+fechaNac+",\nsexo: "+sexo+",\ndia de visita: "+diaVisita+",\nproblema: "+problema
}
//216 object y class
object Codemonkey extends App{
val servicio=new Servicio
servicio.message="Solicito información de la BD"
servicio.activa
}
class Servicio{
private var _message:String=""
def message=_message
def message_=(value:String):Unit=_message=value
import Servicio._
def activa():Unit={ver(message)}
}
object Servicio{
def ver(msg:String):Unit={println(msg)}
}
class X {
// Prefix to call
def m(x: Int) = X.f(x)
// Import and use
import X._
def n(x: Int) = f(x)
}
object X {
def f(x: Int) = x * x
}
//215 clases
object Codemonkey extends App{
val moto=new Moto("Toyota","rojo","sencilla","pequeña")
println(moto.getInfo)
}
abstract class Vehiculo(val _marcax:String=null,val _tipox:String=null,val _colorx:String=null){
private var _marca:String=_marcax
private var _tipo:String=_tipox
private var _color:String=_colorx
def marca = _marca
def marca_= (value:String):Unit = _marca = value
def tipo=_tipo
def tipo_=(value:String):Unit=_tipo=value
def color=_color
def color_=(value:String):Unit=_color=value
def getInfo():String={"marca: "+_marca+" ,tipo: "+_tipo+" , color: "+_color}
}
class Moto(override val _marcax:String,override val _tipox:String,override val _colorx:String,val _tamanyox:String=null) extends Vehiculo(_marcax,_colorx,_tipox){
private var _tamanyo:String=_tamanyox
def tamanyo = _tamanyo
def tamanyo_= (value:String):Unit = _tamanyo = value
override def getInfo():String={super.getInfo+" ,tamaño: "+_tamanyo}
}
//214 paso de parámetros
object Codemonkey extends App{
try{
for(arg <- 0 to args.length ){
println(arg)
}
}catch{
case e:Exception=>println(e.getCause())
}
}
//213 clases internas y externas
import collection.mutable._
object Codemonkey extends App{
val chatter = new Network
val myFace = new Network
val fred = new chatter.Member("Fred")
val wilma = chatter.join("Wilma")
fred.contacts += wilma // Ok
val barney = myFace.join("Barney") // Has type [prettify]myFace.Member
}
class Network {
class Member(val name: String) {
val contacts = new ArrayBuffer[Member]
}
private val members = new ArrayBuffer[Member]
def join(name: String) = {
val m = new Member(name)
members += m
m
}
}
//211 clases internas y externas
object Codemonkey{
def main(args:Array[String]=null){
var res:String=""
try{
val g = new Graph
val n1 = g.newNode
val n2 = g.newNode
val n3 = g.newNode
n1.connectTo(n2)
n3.connectTo(n1)
}catch{ case e:Exception =>
res+="\nha ocurrido un error"
}finally{
if(!res.equals("")){println(res)}
}
}
}//fin clase Codemonkey
class Graph {
class Node {
var connectedNodes: List[Node] = Nil
def connectTo(node: Node) {
if (connectedNodes.find(node.equals).isEmpty) {
connectedNodes = node :: connectedNodes
}
}
}
var nodes: List[Node] = Nil
def newNode: Node = {
val res = new Node
nodes = res :: nodes
res
}
}
//210 try catch
object Codemonkey extends App{
try {
//throwsException();
} catch {
case e: IllegalArgumentException => println("illegal arg. exception");
case e: IllegalStateException => println("illegal state exception");
//case e: IOException => println("IO exception");
} finally {
println("this code is always executed");
}
}
//209 arrays
object Codemonkey extends App{
val MAX=4
var myArray : Array[String] = new Array[String](MAX)
myArray(0) = "Fernando";
myArray(1) = "Veronica";
myArray(2) = "Maribel";
myArray(3) = "Yezmin";
for(i <- 0 until myArray.length){
println("i es: " + i);
println(" " + myArray(i));
}
println("__________________")
for(myString <- myArray) {
println(myString);
}
println("llenando array: ")
var otroArray:Array[Int]=new Array[Int](MAX)
for(j <- 0 until otroArray.length){
println("Introduce valor ["+j+"]: ")
otroArray(j)=readInt
}
println("array:")
for(otro <- otroArray){
println(otro)
}
}
// 208 uso de singleton
object Codemonkey extends App{
var aMain : Main = new Main();
aMain.sayHelloWorld();
Main.sayHi();
}
class Main {
def sayHelloWorld() {
println("Hola mundo en Scala");
}
}
object Main {
def sayHi() {
println("Hola!");
}
}
//207 constructores
object Codemonkey extends App{
val fernando=new Simple
println("hola "+fernando.getMiNombre)
}
class Simple{
private var miNombre:String="Fernando"
//constructor
def this(nombre:String)={
this
this.miNombre=nombre
}
def getMiNombre():String={return this.miNombre}
}
//206 menu, uso de "switch"
object Codemonkey extends App{
println("Introduce primer numero: ")
var num1=readInt
println("Introduce segundo número:")
var num2=readInt
while(true){
var opcion=Menu.menu
opcion match {
case 1 => println("suma: "+Menu.suma(num1,num2))
case 2 => println("resta: "+Menu.resta(num1,num2))
case 3 => println("producto: "+Menu.producto(num1,num2))
case 4 => println("division: "+Menu.division(num1,num2))
case 5 => Menu.salida
}
}//fin while
}
object Menu{
def menu:Int={
var opc:Int=0
println("\tMenu")
println("1. Suma")
println("2. Resta")
println("3. Producto")
println("4. División")
println("5. Salir")
do{
println("Elije una opción: ")
opc=readInt()
}while(opc <0 || opc >5)
return opc
}
def suma(n1:Int,n2:Int)={n1+n2}
def resta(n1:Int,n2:Int)={n1-n2}
def producto(n1:Int,n2:Int)={n1*n2}
def division(n1:Int,n2:Int):Double={n1/n2}
def salida={System.exit(0)}
}
//205 closures
import javax.swing.JOptionPane
object Codemonkey extends App{
var edad:Int=Integer.parseInt(JOptionPane.showInputDialog("Introduce tu edad: "))
val pulsaciones= (i:Double) => (220-i)/15
JOptionPane.showMessageDialog(null,"pulsaciones obtenidas: "+pulsaciones(edad),"Resultado",JOptionPane.PLAIN_MESSAGE)
}
//204 ejecutar comando
import scala.sys.process._
import javax.swing.JOptionPane
object Codemonkey extends App{
var comando:String=JOptionPane.showInputDialog("Introduce comando valido: ")
var result=comando!!
println("resultado: "+result.toString)
}
//203 objetos y traits
object Codemonkey extends App{
val fernando=new Person("Fernando","Carraro",31,"Ing. en computación")
println(fernando.greet(true))
val especialista=new Linguist("Ariel","Carraro",32,"Programación funcional","Scala")
println(especialista.workGreeting)
val estudiante=new Student("UAEMex","Informatica")
println(estudiante.workGreeting)
val cientifico=new ComputerScientist("Uriel","Carraro",32,"Informatico","Scala")
println(cientifico.workGreeting)
}
trait Worker{
def workGreeting:String
}
class Person (
val firstName: String,
val lastName: String,
val age: Int,
val occupation: String
) {
def fullName: String = firstName + " " + lastName
def greet (formal: Boolean): String = {
if (formal)
"Hola, mi nombre es " + fullName + ". Soy un " + occupation + "."
else
"Hola, mi nombre es " + firstName + "!"
}
}
class Linguist(firstName:String,lastName:String,age:Int,val speciality:String,val favoriteLanguage:String)extends Person(firstName, lastName, age, "linguist") {
def workGreeting ="Como un " + occupation + ", soy especialista en " + speciality + " al igual a quienes les gusta este lenguaje: " + favoriteLanguage + "."
}
class Student (school: String, subject: String) extends Worker {
def workGreeting = "Estoy estudiando en " + subject + " en " + school + "!"
}
class ComputerScientist (
firstName: String,
lastName: String,
age: Int,
val speciality: String,
favoriteProgrammingLanguage: String
) extends Person(firstName, lastName, age, "cientifico") with Worker {
def workGreeting =
"como un " + occupation + ", Trabajo como " + speciality + ". La mayor parte de mi código esta escrito en " + favoriteProgrammingLanguage + "."
}
//202 objetos y traits
object Codemonkey extends App{
println(Minino.toString)
Minino.maullar
}
trait Gato{
def maullar={println("Miau !!")}
}
object Minino extends Gato{
var nombre:String="Felix"
var edad:Int=5
var tamanyo:String="mediano y muy discreto"
override def toString()={"Minino(nombre: "+nombre+" , edad: "+edad+" , tamaño: "+tamanyo+")"}
}
//201 mapas
object Codemonkey extends App{
val mapa=Map[String,Int]("Fernando"-> 31,"Alma"->26,"Daniel"->29,"Coco"->56)
//1
mapa foreach ( (t2) => println (t2._1 + "-->" + t2._2))
//2
mapa foreach {case (key, value) => println (key + "-->" + value)}
//3
for ((key, value) <- mapa) println (key + "-->" + value)
}
//200 mapas
object Codemonkey extends App{
val mapaPais=Map[String,String]("Mexico"->"Ciudad de México","Argentina"->"Buenos Aires","Chile"->"Santiago de Chile","Uruguay"->"Monte Video")
mapaPais.foreach(p => println("llave=" + p._1 + ", valor=" + p._2))
mapaPais foreach(m=> println("llave: "+m._1))
mapaPais foreach(m=> println("valor: "+m._2))
}
//199listas
object Codemonkey extends App{
val numeros=List(87,453,6,0,32,13,542,71)
val nombres=List("Tomas","Romulo","Yanet","Maria Isabel","Hilda")
for(num <- numeros) {println(num)}
for(nom <- nombres) {println (nom)}
var suma:Int=0
numeros.foreach(suma+=_)
println("suma: "+suma)
}
//198 clases y objetos
object Codemonkey extends App{
println(new Sencilla().getNombre)
val otra=new Otra("Hola aprendiz de Scala")
otra.verMensaje
println(Mono.datosCompletos)
Superman.datosCompletos
}
class Sencilla{
def getNombre()=println(new Sencilla().getClass().getName())
}
class Otra(mensaje:String){
def verMensaje()={println(mensaje)}
}
object Mono{
val nombre="John Monkey"
val edad=3
val tipo="chimpance"
val ocupacion="jugador profesional de mono blocks"
def datosCompletos:String="Mono(nombre: "+nombre+" , edad: "+edad+" , tipo: "+tipo+" , ocupacion: "+ocupacion+")"
def saludar(ver:Boolean):String={
if(ver){datosCompletos}else{"nada que mostrar"}
}
}
object Superman{
val nombreReal="Clark Kent"
val superpoderes=List("super fuerza","super velocidad","visión de rayos X","capacidad para volar","visión de rayos laser","aliento congelante")
val conocidos=Map("Bruce Wayne"->"Batman", "Lex Luthor"->"Archienemigo","Luisa Lane"->"Novia")
def datosCompletos={
println("nombre real: "+nombreReal)
println("superpoderes: "+superpoderes)
println("conocidos: "+conocidos.keys+" "+conocidos.values)
}
}
// 197 clases
object Codemonkey extends App{
val fer =new Persona("Fernando" ,32 ,45.0 ,1.60)
println(fer.toString)
}
class Persona(n:String,e:Int,p:Double,t:Double){
private var nombre:String=n
private var edad:Int=e
private var peso:Double=p
private var talla:Double=t
def getNombre={nombre}
def getEdad={edad}
def getPeso={peso}
def getTalla={talla}
override def toString(): String = "Persona(nombre:" +nombre + ", edad:" + edad +" , peso: "+peso+" , talla: "+talla+ ")";
}
//196 introducir datos
import javax.swing._
object Codemonkey extends App{
println("Introduce tu nombre: ")
var nombre:String=readLine
//println("Hola ",nombre)//imprime (Hola,nombre)
println("Introduce tu edad: ")
var edad:Int=readInt
println("Introduce tu peso: ")
var peso:Double=readDouble
println("Hola "+nombre)
println("tienes "+edad+" años de edad")
println("y pesas "+peso+" kg")
var cadena:String="Hola "+nombre+"\ntienes "+edad+" años de edad y pesas "+peso+" kg"
JOptionPane.showMessageDialog(null,cadena,"Resultado",JOptionPane.PLAIN_MESSAGE)
}
//195 obtener velocidad
object Codemonkey extends App{
val MAX=50
val dt=0.5
val g=9.81
val k=0.2
var cont:Double=0.0
var v0:Double=0.0
while(cont<MAX){
v0=v0+(g-(k*v0))*cont
cont=cont+dt
Console.println("resultado: "+v0)
}
Console.println("resultado final: "+v0)
}
//194 obtener grados Fahrenheit
object Codemonkey extends App{
var valor:Double=0.0
def obtenerFahr(valor:Double)={
(1.8*valor)+32
}
Console.println("Introduce valor: ")
valor=readDouble
Console.println("resultado: "+obtenerFahr(valor))
}
//193 obtener grados Fahrenheit
object Codemonkey extends App {
var valor:Double=0.0
Console.println("Introduce valor: ")
valor=readDouble()
val obtenerFahr={
(1.8*valor)+32
}
Console.println("resultado: "+obtenerFahr)
}
//192 Conexión
import java.sql.DriverManager
import java.sql.Connection
object Codemonkey {
def main(args: Array[String]) {
// connect to the database named "mysql" on the localhost
val driver = "com.mysql.jdbc.Driver"
val url = "jdbc:mysql://localhost/test"
val username = "root"
val password = "5432"
var connection:Connection = null
try {
Class.forName(driver)
connection = DriverManager.getConnection(url, username, password)
// create the statement, and run the select query
val statement = connection.createStatement()
val resultSet = statement.executeQuery("SELECT nombre,apellido_p,apellido_m FROM persona")
while ( resultSet.next() ) {
val nombre = resultSet.getString("nombre")
val apellido_p = resultSet.getString("apellido_p")
val apellido_m = resultSet.getString("apellido_p")
println("nombre: "+nombre+" , apellido paterno: "+apellido_p+" ,apellido materno: "+apellido_m)
}
} catch {
case e => e.printStackTrace
}
connection.close()
}
}
// 191 datasource
object Codemonkey extends App{
import org.apache.commons.dbcp.BasicDataSource
val dataSource: DataSource = {
val ds = new BasicDataSource
ds.setDriverClassName("org.hsqldb.jdbc.JDBCDriver")
ds.setUsername("SA")
ds.setPassword("")
ds.setMaxActive(20);
ds.setMaxIdle(10);
ds.setInitialSize(10);
ds.setValidationQuery("SELECT 1 FROM INFORMATION_SCHEMA.SYSTEM_USERS")
new java.io.File("target").mkdirs // ensure that folder for database exists
ds.setUrl("jdbc:hsqldb:file:target/db/db")
ds
}
// test the data source validity
dataSource.getConnection().close()
// get the Slick database that uses the pooled connection
val database = Database.forDataSource(dataSource)
}
// 190 object, revisar
object Codemonkey extends App{
import Servicios._
println("Introduce primer número:")
var num1:BigInt=readInt()
println("Introduce segundo número:")
var num2:BigInt=readInt()
println("número factorial de: "+num1+" ,es: "+factorial(num1))
println("número factorial de: "+num2+" ,es: "+factorial(num2))
try{
println("número combinatorio de "+num1+" y "+num2+" ,es:"+combinatorio(num1,num2))
}catch{
case e:Exception=>println("Error: "+e.toString+", causa: "+e.getCause)
}
}
object Servicios{
def factorial(n:BigInt):BigInt=if(n<0){1}else{n*factorial(n-1)}
def combinatorio(m:BigInt,n:BigInt):BigInt=factorial(m)/(factorial(n)*factorial(m-n))
}
// 189 object
object Codemonkey extends App{
import Factorial._
for(x <- 1 to 10){
println(factorial(x))
}
}
object Factorial{
def factorial(n:BigInt):BigInt={
if(n<0){
1
}else{
n*factorial(n-1)
}
}
}
//186 http://ebeab.com/2011/05/27/using-scala-with-jdbc-to-connect-to-mysql/
import java.sql.{Connection, DriverManager, ResultSet};
object Ejemplos extends App{
// Change to Your Database Config
val conn_str = "jdbc:mysql://localhost:3306/test?user=root&password=5432"
// Load the driver
classOf[com.mysql.jdbc.Driver]
// Setup the connection
val conn = DriverManager.getConnection(conn_str)
try {
// Configure to be Read Only
val statement = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)
// Execute Query
val rs = statement.executeQuery("SELECT nombre FROM persona")
// Iterate Over ResultSet
while (rs.next) {
println(rs.getString("nombre"))
}
}
finally {
conn.close
}
}
object SequenceGenerator{
Class.forName("org.postgresql.Driver").newInstance
def connect() = {
DriverManager.getConnection("jdbc:mysql://localhost/test","root", "5432")
}
def generate() = {
val db = connect()
val st = db.createStatement
val res = st.executeQuery("SELECT nombre from persona")
while( res.next) {
println(res.getString("nombre"))
}
}
}
//185 herencia
object Ejemplos extends App{
val fecha:java.util.Date=new java.util.Date
val anyo=fecha.getYear()
val mes=fecha.getMonth()
val dia=fecha.getDay()
val gato=new Gato(5,"blanco","adela",new java.util.Date(anyo,mes,dia))
println(gato.toString)
gato.sonido
}
abstract class Animal(val nombrex:String,val fechaNacx:java.util.Date){
private var _nombre:String=nombrex
private var _fechaNac:java.util.Date=fechaNacx
def nombre=_nombre
def nombre_=(value:String):Unit=_nombre=value
def fechaNac=_fechaNac
def fechaNac_=(value:java.util.Date):Unit=_fechaNac=value
override def toString():String={
"nombre: "+nombre+" , fecha de nacimiento: "+fechaNac
}
}
class Felino(val colorx:String,override val nombrex:String,override val fechaNacx:java.util.Date) extends Animal(nombrex,fechaNacx){
private var _color:String=colorx
def color=_color
def color_=(value:String):Unit=_color=value
override def toString():String={
super.toString+" ,color: "+color
}
}
class Gato(var edadx:Int,override val colorx:String,override val nombrex:String,override val fechaNacx:java.util.Date) extends Felino(colorx,nombrex,fechaNacx){
private var _edad:Int=edadx
def edad=_edad
def edad_=(value:Int):Unit=_edad=value
override def toString():String={
super.toString+" ,edad: "+edad
}
val message:String="Miau !!"
def sonido() = println(message)
}
//184 herencia
object Ejemplos extends App{
val fecha:java.util.Date=new java.util.Date
val anyo=fecha.getYear()
val mes=fecha.getMonth()
val dia=fecha.getDay()
val gato=new Gato(5,"blanco","adela",new java.util.Date(anyo,mes,dia))
println(gato.toString)
gato.sonido
}
abstract class Animal(val nombrex:String,val fechaNacx:java.util.Date){
private var _nombre:String=nombrex
private var _fechaNac:java.util.Date=fechaNacx
def nombre=_nombre
def nombre_=(value:String):Unit=_nombre=value
def fechaNac=_fechaNac
def fechaNac_=(value:java.util.Date):Unit=_fechaNac=value
override def toString():String={
"nombre: "+nombre+" , fecha de nacimiento: "+fechaNac
}
}
class Felino(val colorx:String,override val nombrex:String,override val fechaNacx:java.util.Date) extends Animal(nombrex,fechaNacx){
private var _color:String=colorx
def color=_color
def color_=(value:String):Unit=_color=value
override def toString():String={
super.toString+" ,color: "+color
}
}
class Gato(var edadx:Int,override val colorx:String,override val nombrex:String,override val fechaNacx:java.util.Date) extends Felino(colorx,nombrex,fechaNacx){
private var _edad:Int=edadx
def edad=_edad
def edad_=(value:Int):Unit=_edad=value
override def toString():String={
super.toString+" ,edad: "+edad
}
val message:String="Miau !!"
def sonido() = println(message)
}
//183
object Ejemplos extends App{
val serv=new ServicioTest
val arr:Array[BigInt]=new Array[BigInt](7)
arr(0)=1
arr(1)=2
arr(2)=3
arr(3)=4
arr(4)=5
arr(5)=6
arr(6)=7
var otro=Array[BigInt](8,9,10)
serv.verMsg(arr)
serv.verMsg(otro)
}
trait Servicio{
def verMsg(msg:Array[BigInt]=null):Unit
}
class ServicioTest extends Servicio{
def verMsg(msg:Array[BigInt]=null):Unit={
for(arg <- msg){
println("no.: "+arg+" ->"+factorial(arg))
}
}
def factorial(n:BigInt):BigInt={
if(n<1){1}else{n*factorial(n-1)}
}
}
//182
object Ejemplos extends App{
val gato = new Gato()
gato.sonido
}
abstract class Greeter {
val message: String
def sonido() = println(message)
}
class Gato extends Greeter{
val message:String = "Miau!"
}
//181
object Ejemplos extends App{
val serv=new ServicioTest
serv.verMsg(args)
}
trait Servicio{
def verMsg(msg:Array[String]=null):Unit
}
class ServicioTest extends Servicio{
def verMsg(msg:Array[String]=null):Unit={
for(arg <- msg){
println(arg)
}
}
}
//180
trait Logger {
protected def print(message: String)
// override this to be notified before the application
// quits due to an error
protected def cleanup() { }
def info(message: String) {
print(s"[info] $message")
}
def warning(message: String) {
print(s"[warning] $message")
}
def error(message: String) = {
print(s"[error] $message")
cleanup()
sys.exit(1)
}
}
class ConsoleLogger extends Logger {
protected def print(message: String) {
println(message)
}
}
object Main extends App {
val logger = new ConsoleLogger()
logger.info("Starting up...")
try {
} catch {
case npe: NullPointerException =>
logger.warning("You should have used Option!")
case e: Exception =>
logger.error(e.getMessage)
}
logger.info("Completed Successfully")
}
//179
object Ejemplos extends App{
import Servicios._
for(arg <- args){
verMsg(arg)
}
}
object Servicios{
def verMsg(msg:String=null):Unit={if(msg!=null){println(msg)}}
}
//178
object Ejemplos extends App{
import scala.io.Source
import java.io.{FileReader, FileNotFoundException, IOException}
val filename = "/home/fernando/workspace/Programas/EjemplosScala/arch.txt"
try {
for (line <- Source.fromFile(filename).getLines()) {
println(line)
}
} catch {
case ex: FileNotFoundException => println("Couldn't find that file.")
case ex: IOException => println("Had an IOException trying to read that file")
}
}
//177
object Ejemplos extends App{
import java.io.{ File, PrintWriter }
val f=new File("/home/fernando/workspace/Programas/EjemplosScala/arch.txt")
if(!f.exists()){
println("no existe")
f.createNewFile()
}else{
val writer = new PrintWriter(f)
import javax.swing.JOptionPane
var escrito:String=""
escrito=JOptionPane.showInputDialog("Introduce dato: ")
writer.write(escrito)
writer.close()
//println("existe")
import scala.io.Source
Source.fromFile("/home/fernando/workspace/Programas/EjemplosScala/arch.txt" ).foreach{
print
}
val holmes = Source.fromFile("/home/fernando/workspace/Programas/EjemplosScala/arch.txt").mkString
println(holmes)
}
}
//176 enumeraciones
object Ejemplos extends App{
import TipoDocumentos._
try{
println(tipoDoc("X"))
}catch{
case e: Exception=>println(e.toString+" -- "+e.getCause)
}
}
object TipoDocumentos extends Enumeration("XML","PDF","DOC","DOCX","TXT"){
val XML,PDF,DOC,DOCX,TXT=Value
def tipoDoc(c:String):String={
c match {
case "XML" => "XML Editor"
case "PDF" => "Adobe Reader"
case "DOC" => "Oficce 2007"
case "DOCX" => "Oficce 2013"
case "TXT" => "Bloc de notas"
}
}
}
//175 enumeraciones
object Ejemplos extends App{
var opc:Int=1
var result:String=""
opc match{
case 0 => result=Sexo.FEMENINO.toString()
case 1 => result=Sexo.MASCULINO.toString()
}
println(" result: "+result)
}
object Sexo extends Enumeration("MASCULINO","FEMENINO"){
val MASCULINO,FEMENINO=Value
}
//174 object
object Codemonkey extends App{
import Factorial._
for(x <- 1 to 10){
println(factorial(x))
}
}
object Factorial{
def factorial(n:BigInt):BigInt={
if(n<1){
1
}else{
n*factorial(n-1)
}
}
}
//173trait: http://www.tutorialspoint.com/scala/scala_traits.htm
object Codemonkey extends App{
val p1 = new Point(2, 3)
val p2 = new Point(2, 4)
val p3 = new Point(3, 3)
println(p1.isNotEqual(p2))
println(p1.isNotEqual(p3))
println(p1.isNotEqual(2))
}
trait Equal {
def isEqual(x: Any): Boolean
def isNotEqual(x: Any): Boolean = !isEqual(x)
}
class Point(xc: Int, yc: Int) extends Equal {
var x: Int = xc
var y: Int = yc
def isEqual(obj: Any) =
obj.isInstanceOf[Point] &&
obj.asInstanceOf[Point].x == x
}
//172 ejemplo de enumeraciones
object Codemonkey extends App{
import javax.swing.JOptionPane
var nombre:String=""
var direccion:String=""
var fecha:String=""
var sexo:String=""
var diaVisita:String=""
var problema:String=""
try{
do{nombre=JOptionPane.showInputDialog("Introduce nombre:")}while(nombre=="")
do{direccion=JOptionPane.showInputDialog("Introduce dirección:")}while(direccion=="")
do{fecha=JOptionPane.showInputDialog("Introduce fecha de nacimiento:")}while(fecha=="")
do{sexo=JOptionPane.showInputDialog("Introduce sexo: [m=Masculino, f=Femenino]")}while(sexo=="")
do{diaVisita=JOptionPane.showInputDialog("Introduce dia de visita:")}while(diaVisita=="")
do{problema=JOptionPane.showInputDialog("Introduce problema:")}while(problema=="")
var x:String=""
sexo match{
case "f" => x=Sexo.FEMENINO.toString()
case "m" => x=Sexo.MASCULINO.toString()
}
val paciente=new Paciente(nombre,direccion,new java.util.Date(fecha),Sexo.withName(x),new java.util.Date(diaVisita),problema)
var result:String=paciente.toString
JOptionPane.showMessageDialog(null,result,"Resultado",JOptionPane.PLAIN_MESSAGE)
}catch{case e:Exception=>JOptionPane.showMessageDialog(null, e.toString()+", causa: "+e.getCause(),"Ha ocurrido un error",JOptionPane.ERROR_MESSAGE)}
}
object Sexo extends Enumeration("MASCULINO","FEMENINO"){
//type tuSexo=Value
val MASCULINO,FEMENINO=Value
}
class Paciente(var nombrex:String=null, var direccionx:String=null,var fechaNacx:java.util.Date=null,var sexox:Sexo.Value,var diaVisitax:java.util.Date,var problemax:String=null){
private var _nombre:String=nombrex
private var _direccion:String=direccionx
private var _fechaNac:java.util.Date=fechaNacx
private var _sexo:Sexo.Value=sexox
private var _diaVisita:java.util.Date=diaVisitax
private var _problema:String=problemax
def nombre=_nombre
def nombre_=(value:String):Unit=_nombre=value
def direccion=_direccion
def direccion_=(value:String):Unit=_direccion=value
def fechaNac=_fechaNac
def fechaNac_=(value:java.util.Date):Unit=_fechaNac=value
def sexo=_sexo
def sexo_=(value:Sexo.Value):Unit=_sexo=value
def diaVisita=_diaVisita
def diaVisita_=(value:java.util.Date):Unit=_diaVisita=value
def problema=_problema
def problema_=(value:String):Unit=_problema=value
override def toString():String="nombre: "+nombre+",\ndireccion: "+direccion+",\nfecha de nacimiento: "+fechaNac+",\nsexo: "+sexo+",\ndia de visita:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment