À noter que Kotlin (enfin, au moins IntelliJ) permet de convertir du code Java en Kotlin. Ça fonctionne, mais nécessite un peu de nettoyage et de « Kotlinisation » du code.
Par exemple, si je convertis le TapTempo Java directement, j'obtiens (après avoir remis les fonctions directement dans le fichier, sans passer par un objet inutile) :
packagecom.i2bp.taptempoimportorg.apache.commons.cli.CommandLineimportorg.apache.commons.cli.CommandLineParserimportorg.apache.commons.cli.DefaultParserimportorg.apache.commons.cli.HelpFormatterimportorg.apache.commons.cli.Optionimportorg.apache.commons.cli.Optionsimportorg.apache.commons.cli.ParseExceptionimportjava.text.DecimalFormatimportjava.util.Scannerimportjava.util.ArrayDequeimportjava.util.Dateimportjava.util.DequefuncomputeBPM(currentTime:Long,lastTime:Long,occurenceCount:Int):Double{varoccurenceCount=occurenceCountif(occurenceCount==0){occurenceCount=1}valelapsedTime=(currentTime-lastTime).toDouble()valmeanTime=elapsedTime/occurenceCountreturn60.0*1000/meanTime}funmain(args:Array<String>){varprecision=0varresetTime=5varsampleSize=5valoptions=Options()valhitTimePoints=ArrayDeque<Long>()valoptHelp=Option("h","help",false,"Display this help message.")optHelp.isRequired=falseoptions.addOption(optHelp)valoptPrecision=Option("p","precision",true,"Set the decimal precision of the tempo display. Default is 0 digits, max is 5 digits.")optPrecision.isRequired=falseoptions.addOption(optPrecision)valoptResetTime=Option("r","reset-time",true,"Set the time in second to reset the computation. Default is 5 seconds.")optResetTime.isRequired=falseoptions.addOption(optResetTime)valoptSampleSize=Option("s","sample-size",true,"Set the number of samples needed to compute the tempo. Default is 5 samples.")optSampleSize.isRequired=falseoptions.addOption(optSampleSize)valoptVersion=Option("v","version",false,"Display the version.")optVersion.isRequired=falseoptions.addOption(optVersion)valparser=DefaultParser()valformatter=HelpFormatter()varcmd:CommandLine?=nulltry{cmd=parser.parse(options,args)if(cmd!!.hasOption('p')){precision=Integer.parseInt(cmd.getOptionValue('p'))if(precision<0){precision=0}elseif(precision>5){precision=5}}if(cmd.hasOption('r')){resetTime=Integer.parseInt(cmd.getOptionValue('r'))if(resetTime<1){resetTime=1}}if(cmd.hasOption('s')){sampleSize=Integer.parseInt(cmd.getOptionValue('s'))if(sampleSize<1){sampleSize=1}}}catch(e:ParseException){println(e.javaClass.toString()+": "+e.message)formatter.printHelp("TempoTap",options)System.exit(1)}catch(e:NumberFormatException){println(e.javaClass.toString()+": "+e.message)formatter.printHelp("TempoTap",options)System.exit(1)}if(cmd!!.hasOption('h')||cmd.hasOption('v')){if(cmd.hasOption('h')){formatter.printHelp("TempoTap",options)}if(cmd.hasOption('v')){println("Version: 1.0")}System.exit(0)}valdf=DecimalFormat()df.maximumFractionDigits=precisiondf.minimumFractionDigits=precisionprintln("Hit enter key for each beat (q to quit).\n")valkeyboard=Scanner(System.`in`)keyboard.useDelimiter("")varshouldContinue=truewhile(shouldContinue){varc:Chardo{c=keyboard.next()[0]if(c=='q'){shouldContinue=falseprintln("Bye Bye!\n")break}}while(c.toInt()!=10)if(shouldContinue){valcurrentTime=System.currentTimeMillis()// Reset if the hit diff is too big.if(!hitTimePoints.isEmpty()&¤tTime-hitTimePoints.last>resetTime*1000){// Clear the history.hitTimePoints.clear()}hitTimePoints.add(currentTime)if(hitTimePoints.size>1){valbpm=computeBPM(hitTimePoints.last,hitTimePoints.first,hitTimePoints.size-1)valbpmRepresentation=df.format(bpm)println("Tempo: $bpmRepresentation bpm")}else{println("[Hit enter key one more time to start bpm computation...]")}while(hitTimePoints.size>sampleSize){hitTimePoints.pop()}}}}
Bref, c'est surtout utile pour :
Avoir une base de code cohérente.
Vérifier comment un concept Java est censé se transcrire en Kotlin.
# Conversion automatique de code
Posté par SpaceFox (site web personnel, Mastodon) . En réponse au journal Kotaten : un Tap Tempo en Kotlin. Évalué à 4.
À noter que Kotlin (enfin, au moins IntelliJ) permet de convertir du code Java en Kotlin. Ça fonctionne, mais nécessite un peu de nettoyage et de « Kotlinisation » du code.
Par exemple, si je convertis le TapTempo Java directement, j'obtiens (après avoir remis les fonctions directement dans le fichier, sans passer par un objet inutile) :
Bref, c'est surtout utile pour :
La connaissance libre : https://zestedesavoir.com