提交 3d86084a 编写于 作者: N Natalia.Ukhorskaya

Add tests for rendering: examples from actual confluence, special tags

上级 8074629b
......@@ -6,6 +6,7 @@
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
......
package org.jetbrains.jet.confluence;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* @author Natalia.Ukhorskaya
*/
public class TestUtils {
public static String readFile(File file) throws IOException {
FileReader reader = new FileReader(file);
StringBuilder builder = new StringBuilder();
int c;
while ((c = reader.read()) >= 0) {
builder.append((char) c);
}
reader.close();
return builder.toString();
}
public static void writeFile(File file, String str) throws IOException {
FileWriter writer = new FileWriter(file);
writer.write(str);
writer.close();
}
public static String divideResultForLines(String result) {
return result.replaceAll("<div class=\"line\">", "\n<div class=\"line\">");
}
}
package org.jetbrains.jet.confluence.rendering;
import com.atlassian.renderer.v2.macro.MacroException;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.jetbrains.jet.confluence.TestUtils;
import org.jetbrains.jet.lexer.JetMacro;
import java.io.File;
import java.io.IOException;
/**
* @author Natalia.Ukhorskaya
*/
public class ConfluenceRenderingTest extends TestCase {
public static Test suite() {
TestSuite suite = new TestSuite();
TestSuite ats = new TestSuite();
suite.addTest(ats);
File parsingSourceDir = new File("./testData/rendering");
addFilesFromDirToSuite(parsingSourceDir, ats);
return suite;
}
private static void addFilesFromDirToSuite(File file, TestSuite ats) {
if (file.isDirectory()) {
for (File sourceFile : file.listFiles()) {
addFilesFromDirToSuite(sourceFile, ats);
}
} else {
if (file.getName().endsWith(".kt")) {
ats.addTest(new ConfluenceRenderingTest(file.getName(), file));
}
}
}
private final File sourceFile;
public ConfluenceRenderingTest(String name, File sourceFile) {
super(name);
this.sourceFile = sourceFile;
}
@Override
protected void runTest() throws Throwable {
checkSourceFile(sourceFile);
}
private void checkSourceFile(File sourceFile) throws IOException, MacroException {
String source = TestUtils.readFile(sourceFile);
StringBuilder actualResult = new StringBuilder();
new JetMacro().generateHtmlFromCode(source, actualResult);
File expectedResultFile = new File(sourceFile.getAbsolutePath().replace(".kt", ".txt"));
if (!expectedResultFile.exists()) {
expectedResultFile.createNewFile();
TestUtils.writeFile(expectedResultFile, TestUtils.divideResultForLines(actualResult.toString()));
assertTrue("File with expected result for " + expectedResultFile.getAbsolutePath() + " is absent.", false);
}
String expectedResult = TestUtils.readFile(expectedResultFile);
assertEquals(expectedResult,
TestUtils.divideResultForLines(actualResult.toString()));
}
}
class Greeter1() {
}
class Greeter2(val name : String) {
}
\ No newline at end of file
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
<div class="line"><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Greeter1</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Greeter2</code><code class="jet plain">(</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">name</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code></div></div></div></div>
\ No newline at end of file
val a : Int = 1
val b = 1
val c : Int
c = 1
var a : String = "sss"
\ No newline at end of file
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
<div class="line"><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">a</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet number">1</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">b</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet number">1</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">c</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">c</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet number">1</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">var</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">a</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">sss</code><code class="jet string">&quot;</code></div></div></div></div>
\ No newline at end of file
val language = if (args.size == 0) "EN" else args[0]
when (language) {
"EN" -> "Hello!"
"ES" -> "¡Hola!"
"RU" -> "Привет!"
else -> "Sorry, I can't greet you in $language yet"
}
\ No newline at end of file
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
<div class="line"><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">language</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">if</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet plain">.</code><code class="jet plain">size</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">==</code><code class="jet whitespace">&nbsp;</code><code class="jet number">0</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">EN</code><code class="jet string">&quot;</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">else</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">args</code><code class="jet plain">[</code><code class="jet number">0</code><code class="jet plain">]</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">when</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">(</code><code class="jet plain">language</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">EN</code><code class="jet string">&quot;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">Hello!</code><code class="jet string">&quot;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">ES</code><code class="jet string">&quot;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">¡Hola!</code><code class="jet string">&quot;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">RU</code><code class="jet string">&quot;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">Привет!</code><code class="jet string">&quot;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;</code><code class="jet keyword">else</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">Sorry,&nbsp;I&nbsp;can't&nbsp;greet&nbsp;you&nbsp;in&nbsp;</code><code class="jet escape">$</code><code class="jet plain">language</code><code class="jet string">&nbsp;yet</code><code class="jet string">&quot;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code></div></div></div></div>
\ No newline at end of file
namespace addressbook
class Contact(
val name : String,
val emails : List<EmailAddress>,
val addresses : List<PostalAddress>,
val phonenums : List<PhoneNumber>
)
class EmailAddress(
val user : String,
val host : String
)
class PostalAddress(
val streetAddress : String,
val city : String,
val zip : String,
val state : USState?,
val country : Country
) {
assert {(state == null) xor (country == Countries["US"]) }
}
class PhoneNumber(
val country : Country,
val areaCode : Int,
val number : Long
)
object Countries {
fun get(id : CountryID) : Country = countryTable[id]
private var table : Map<String, Country>? = null
private val countryTable : Map<String, Country>
get() {
if (table == null) {
table = HashMap()
for (line in TextFile("countries.txt").lines(stripWhiteSpace = true)) {
table[line] = Country(line)
}
}
return table
}
}
class Country(val name : String)
\ No newline at end of file
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
<div class="line"><code class="jet plain">namespace</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">addressbook</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Contact</code><code class="jet plain">(</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">name</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet plain">,</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">emails</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">List</code><code class="jet plain">&lt;</code><code class="jet plain">EmailAddress</code><code class="jet plain">&gt;</code><code class="jet plain">,</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">addresses</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">List</code><code class="jet plain">&lt;</code><code class="jet plain">PostalAddress</code><code class="jet plain">&gt;</code><code class="jet plain">,</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">phonenums</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">List</code><code class="jet plain">&lt;</code><code class="jet plain">PhoneNumber</code><code class="jet plain">&gt;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">)</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">EmailAddress</code><code class="jet plain">(</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">user</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet plain">,</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">host</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">)</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">PostalAddress</code><code class="jet plain">(</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">streetAddress</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet plain">,</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">city</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet plain">,</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">zip</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet plain">,</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">state</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">USState</code><code class="jet plain">?</code><code class="jet plain">,</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">country</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Country</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;</code><code class="jet plain">assert</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code><code class="jet plain">(</code><code class="jet plain">state</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">==</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">null</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">xor</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">(</code><code class="jet plain">country</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">==</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Countries</code><code class="jet plain">[</code><code class="jet string">&quot;</code><code class="jet string">US</code><code class="jet string">&quot;</code><code class="jet plain">]</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">PhoneNumber</code><code class="jet plain">(</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">country</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Country</code><code class="jet plain">,</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">areaCode</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet plain">,</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">number</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Long</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">)</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">object</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Countries</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet softkeyword">get</code><code class="jet plain">(</code><code class="jet plain">id</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">CountryID</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Country</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">countryTable</code><code class="jet plain">[</code><code class="jet plain">id</code><code class="jet plain">]</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet softkeyword">private</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">var</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">table</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Map</code><code class="jet plain">&lt;</code><code class="jet plain">String</code><code class="jet plain">,</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Country</code><code class="jet plain">&gt;</code><code class="jet plain">?</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">null</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet softkeyword">private</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">countryTable</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Map</code><code class="jet plain">&lt;</code><code class="jet plain">String</code><code class="jet plain">,</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Country</code><code class="jet plain">&gt;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet softkeyword">get</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">if</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">(</code><code class="jet plain">table</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">==</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">null</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">table</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">HashMap</code><code class="jet plain">(</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">for</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">(</code><code class="jet plain">line</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">in</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">TextFile</code><code class="jet plain">(</code><code class="jet string">&quot;</code><code class="jet string">countries.txt</code><code class="jet string">&quot;</code><code class="jet plain">)</code><code class="jet plain">.</code><code class="jet plain">lines</code><code class="jet plain">(</code><code class="jet plain">stripWhiteSpace</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">true</code><code class="jet plain">)</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">table</code><code class="jet plain">[</code><code class="jet plain">line</code><code class="jet plain">]</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Country</code><code class="jet plain">(</code><code class="jet plain">line</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">return</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">table</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Country</code><code class="jet plain">(</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">name</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet plain">)</code></div></div></div></div>
\ No newline at end of file
// Return type mandatory
fun sum(a : Int, b : Int) : Int {
return a + b
}
\ No newline at end of file
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
<div class="line"><code class="jet jet-comment">//&nbsp;Return&nbsp;type&nbsp;mandatory</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">sum</code><code class="jet plain">(</code><code class="jet plain">a</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet plain">,</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">b</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">return</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">a</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">+</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">b</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code></div></div></div></div>
\ No newline at end of file
val a : Int = 1
val b = 1 // Type is inferred
val c : Int // Type required when no initializer provided
c = 1 // definite assignment
\ No newline at end of file
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
<div class="line"><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">a</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet number">1</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">b</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet number">1</code><code class="jet whitespace">&nbsp;</code><code class="jet jet-comment">//&nbsp;Type&nbsp;is&nbsp;inferred</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">c</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet whitespace">&nbsp;</code><code class="jet jet-comment">//&nbsp;Type&nbsp;required&nbsp;when&nbsp;no&nbsp;initializer&nbsp;provided</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">c</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet number">1</code><code class="jet whitespace">&nbsp;</code><code class="jet jet-comment">//&nbsp;definite&nbsp;assignment</code></div></div></div></div>
\ No newline at end of file
package multiplier
// Return null if str does not hold a number
fun parseInt(str : String) : Int? {
// ...
}
fun main(args : Array<String>) {
if (args.size < 2) {
print("No number supplied");
}
val x = parseInt(args[0])
val y = parseInt(args[1])
// We cannot say 'x * y' now because they may hold nulls
if (x != null && y != null) {
print(x * y) // Now we can
}
// ...
if (x == null) {
print("Wrong number format in '${args[0]}'")
return
}
if (y == null) {
print("Wrong number format in '${args[1]}'")
return
}
print(x * y) // Now we know that x and y are not nulls
}
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
<div class="line"><code class="jet keyword">package</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">multiplier</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet jet-comment">//&nbsp;Return&nbsp;null&nbsp;if&nbsp;str&nbsp;does&nbsp;not&nbsp;hold&nbsp;a&nbsp;number</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">parseInt</code><code class="jet plain">(</code><code class="jet plain">str</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet plain">?</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet jet-comment">//&nbsp;...</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">main</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Array</code><code class="jet plain">&lt;</code><code class="jet plain">String</code><code class="jet plain">&gt;</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">if</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet plain">.</code><code class="jet plain">size</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">&lt;</code><code class="jet whitespace">&nbsp;</code><code class="jet number">2</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">print</code><code class="jet plain">(</code><code class="jet string">&quot;</code><code class="jet string">No&nbsp;number&nbsp;supplied</code><code class="jet string">&quot;</code><code class="jet plain">)</code><code class="jet plain">;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">x</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">parseInt</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet plain">[</code><code class="jet number">0</code><code class="jet plain">]</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">y</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">parseInt</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet plain">[</code><code class="jet number">1</code><code class="jet plain">]</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet jet-comment">//&nbsp;We&nbsp;cannot&nbsp;say&nbsp;'x&nbsp;*&nbsp;y'&nbsp;now&nbsp;because&nbsp;they&nbsp;may&nbsp;hold&nbsp;nulls</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">if</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">(</code><code class="jet plain">x</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">!=</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">null</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">&amp;&amp;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">y</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">!=</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">null</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">print</code><code class="jet plain">(</code><code class="jet plain">x</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">*</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">y</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet jet-comment">//&nbsp;Now&nbsp;we&nbsp;can</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet jet-comment">//&nbsp;...</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">if</code><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">(</code><code class="jet plain">x</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">==</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">null</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">print</code><code class="jet plain">(</code><code class="jet string">&quot;</code><code class="jet string">Wrong&nbsp;number&nbsp;format&nbsp;in&nbsp;'</code><code class="jet escape">${</code><code class="jet plain">args</code><code class="jet plain">[</code><code class="jet number">0</code><code class="jet plain">]</code><code class="jet escape">}</code><code class="jet string">'</code><code class="jet string">&quot;</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">return</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">if</code><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">(</code><code class="jet plain">y</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">==</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">null</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">print</code><code class="jet plain">(</code><code class="jet string">&quot;</code><code class="jet string">Wrong&nbsp;number&nbsp;format&nbsp;in&nbsp;'</code><code class="jet escape">${</code><code class="jet plain">args</code><code class="jet plain">[</code><code class="jet number">1</code><code class="jet plain">]</code><code class="jet escape">}</code><code class="jet string">'</code><code class="jet string">&quot;</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">return</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">print</code><code class="jet plain">(</code><code class="jet plain">x</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">*</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">y</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet jet-comment">//&nbsp;Now&nbsp;we&nbsp;know&nbsp;that&nbsp;x&nbsp;and&nbsp;y&nbsp;are&nbsp;not&nbsp;nulls</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code></div></div></div></div>
\ No newline at end of file
fun max(a : Int, b : Int) : Int {
if (a > b)
return a
else
return b
}
\ No newline at end of file
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
<div class="line"><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">max</code><code class="jet plain">(</code><code class="jet plain">a</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet plain">,</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">b</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">if</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">(</code><code class="jet plain">a</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">b</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">return</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">a</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">else</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">return</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">b</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code></div></div></div></div>
\ No newline at end of file
fun main(args : Array<String>) {
val language = if (args.size == 0) "EN" else args[0]
println(when (language) {
"EN" -> "Hello!"
"ES" -> "¡Hola!"
"RU" -> "Привет!"
else -> "Sorry, I can't greet you in $language yet"
})
}
\ No newline at end of file
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
<div class="line"><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">main</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Array</code><code class="jet plain">&lt;</code><code class="jet plain">String</code><code class="jet plain">&gt;</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">language</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">if</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet plain">.</code><code class="jet plain">size</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">==</code><code class="jet whitespace">&nbsp;</code><code class="jet number">0</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">EN</code><code class="jet string">&quot;</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">else</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">args</code><code class="jet plain">[</code><code class="jet number">0</code><code class="jet plain">]</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">println</code><code class="jet plain">(</code><code class="jet keyword">when</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">(</code><code class="jet plain">language</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">EN</code><code class="jet string">&quot;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">Hello!</code><code class="jet string">&quot;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">ES</code><code class="jet string">&quot;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">¡Hola!</code><code class="jet string">&quot;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">RU</code><code class="jet string">&quot;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">Привет!</code><code class="jet string">&quot;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">else</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">Sorry,&nbsp;I&nbsp;can't&nbsp;greet&nbsp;you&nbsp;in&nbsp;</code><code class="jet escape">$</code><code class="jet plain">language</code><code class="jet string">&nbsp;yet</code><code class="jet string">&quot;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">}</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code></div></div></div></div>
\ No newline at end of file
class Greeter(val name : String) {
fun greet() {
println("Hello, ${name}");
}
}
fun main(args : Array<String>) {
Greeter(args[0]).greet()
}
\ No newline at end of file
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
<div class="line"><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Greeter</code><code class="jet plain">(</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">name</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">greet</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">println</code><code class="jet plain">(</code><code class="jet string">&quot;</code><code class="jet string">Hello,&nbsp;</code><code class="jet escape">${</code><code class="jet plain">name</code><code class="jet escape">}</code><code class="jet string">&quot;</code><code class="jet plain">)</code><code class="jet plain">;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">main</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Array</code><code class="jet plain">&lt;</code><code class="jet plain">String</code><code class="jet plain">&gt;</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">Greeter</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet plain">[</code><code class="jet number">0</code><code class="jet plain">]</code><code class="jet plain">)</code><code class="jet plain">.</code><code class="jet plain">greet</code><code class="jet plain">(</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code></div></div></div></div>
\ No newline at end of file
fun main(args : Array<String>) {
if (args.size == 0) {
println("Please provide a name as a command-line argument")
return
}
println("Hello, ${args[0]}!")
}
\ No newline at end of file
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
<div class="line"><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">main</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Array</code><code class="jet plain">&lt;</code><code class="jet plain">String</code><code class="jet plain">&gt;</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">if</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet plain">.</code><code class="jet plain">size</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">==</code><code class="jet whitespace">&nbsp;</code><code class="jet number">0</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">println</code><code class="jet plain">(</code><code class="jet string">&quot;</code><code class="jet string">Please&nbsp;provide&nbsp;a&nbsp;name&nbsp;as&nbsp;a&nbsp;command-line&nbsp;argument</code><code class="jet string">&quot;</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">return</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">println</code><code class="jet plain">(</code><code class="jet string">&quot;</code><code class="jet string">Hello,&nbsp;</code><code class="jet escape">${</code><code class="jet plain">args</code><code class="jet plain">[</code><code class="jet number">0</code><code class="jet plain">]</code><code class="jet escape">}</code><code class="jet string">!</code><code class="jet string">&quot;</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code></div></div></div></div>
\ No newline at end of file
import html.*
fun result(args : Array<String>) =
html {
head {
title {+"XML encoding with Kotlin"}
}
body {
h1 {+"XML encoding with Kotlin"}
p {+"this format can be used as an alternative markup to XML"}
// an element with attributes and text content
a(href = "http://jetbrains.com/kotlin") {+"Kotlin"}
// mixed content
p {
+"This is some"
b {+"mixed"}
+"text. For more see the"
a(href = "http://jetbrains.com/kotlin") {+"Kotlin"}
+"project"
}
p {+"some text"}
// content generated by
p {
for (arg in args)
+arg
}
}
}
\ No newline at end of file
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
<div class="line"><code class="jet softkeyword">import</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">html</code><code class="jet plain">.</code><code class="jet plain">*</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">result</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Array</code><code class="jet plain">&lt;</code><code class="jet plain">String</code><code class="jet plain">&gt;</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">html</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">head</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">title</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code><code class="jet plain">+</code><code class="jet string">&quot;</code><code class="jet string">XML&nbsp;encoding&nbsp;with&nbsp;Kotlin</code><code class="jet string">&quot;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">body</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">h1</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code><code class="jet plain">+</code><code class="jet string">&quot;</code><code class="jet string">XML&nbsp;encoding&nbsp;with&nbsp;Kotlin</code><code class="jet string">&quot;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">p</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code><code class="jet plain">+</code><code class="jet string">&quot;</code><code class="jet string">this&nbsp;format&nbsp;can&nbsp;be&nbsp;used&nbsp;as&nbsp;an&nbsp;alternative&nbsp;markup&nbsp;to&nbsp;XML</code><code class="jet string">&quot;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet jet-comment">//&nbsp;an&nbsp;element&nbsp;with&nbsp;attributes&nbsp;and&nbsp;text&nbsp;content</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">a</code><code class="jet plain">(</code><code class="jet plain">href</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">http://jetbrains.com/kotlin</code><code class="jet string">&quot;</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code><code class="jet plain">+</code><code class="jet string">&quot;</code><code class="jet string">Kotlin</code><code class="jet string">&quot;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet jet-comment">//&nbsp;mixed&nbsp;content</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">p</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">+</code><code class="jet string">&quot;</code><code class="jet string">This&nbsp;is&nbsp;some</code><code class="jet string">&quot;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">b</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code><code class="jet plain">+</code><code class="jet string">&quot;</code><code class="jet string">mixed</code><code class="jet string">&quot;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">+</code><code class="jet string">&quot;</code><code class="jet string">text.&nbsp;For&nbsp;more&nbsp;see&nbsp;the</code><code class="jet string">&quot;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">a</code><code class="jet plain">(</code><code class="jet plain">href</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">http://jetbrains.com/kotlin</code><code class="jet string">&quot;</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code><code class="jet plain">+</code><code class="jet string">&quot;</code><code class="jet string">Kotlin</code><code class="jet string">&quot;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">+</code><code class="jet string">&quot;</code><code class="jet string">project</code><code class="jet string">&quot;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">p</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code><code class="jet plain">+</code><code class="jet string">&quot;</code><code class="jet string">some&nbsp;text</code><code class="jet string">&quot;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet jet-comment">//&nbsp;content&nbsp;generated&nbsp;by</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">p</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">for</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">(</code><code class="jet plain">arg</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">in</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">args</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">+</code><code class="jet plain">arg</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">}</code></div></div></div></div>
\ No newline at end of file
import <ref="html_ns":>html.*
fun result(args : Array<String>) =
<ref="html":>html {
<ref="head":>head {
<ref="title":>title {<ref="plus":>+"XML encoding with Kotlin"}
}
<ref="body":>body {
<ref="h1":>h1 {<ref="plus":>+"XML encoding with Kotlin"}
<ref="p":>p {<ref="plus":>+"this format can be used as an alternative markup to XML"}
// an element with attributes and text content
<ref="a":>a(href = "http://jetbrains.com/kotlin") {<ref="plus":>+"Kotlin"}
// mixed content
<ref="p":>p {
<ref="plus":>+"This is some"
<ref="b":>b {<ref="plus":>+"mixed"}
<ref="plus":>+"text. For more see the"
<ref="a":>a(href = "http://jetbrains.com/kotlin") {<ref="plus":>+"Kotlin"}
<ref="plus":>+"project"
}
<ref="p":>p {<ref="plus":>+"some text"}
// content generated by
<ref="p":>p {
for (arg in args)
<ref="plus":>+arg
}
}
}
<label="html_ns":>namespace html {
<label="Factory":>abstract class Factory<T> {
fun create() : T
}
<label="Element":>abstract class Element
<label="TextElement":>class TextElement(val text : String) : Element
<label="Tag":>abstract class Tag(val name : String) : Element {
<label="children":>val children = ArrayList<Element>()
<label="attributes":>val attributes = HashMap<String, String>()
protected fun initTag<T : Element>(init : T.() -> Unit) : T
where class object T : Factory<T> {
val tag = T.create()
tag.init()
<ref="children":>children.add(tag)
return tag
}
}
<label="TagWithText":>abstract class TagWithText(name : String) : Tag(name) {
<label="plus"/>fun String.plus() {
children.add(TextElement(this))
}
}
<label="HTML":>class HTML() : TagWithText("html") {
class object : Factory<HTML> {
override fun create() = HTML()
}
<label="head"/>fun head(init : Head.() -> Unit) = initTag(init)
<label="body"/>fun body(init : Body.() -> Unit) = initTag(init)
}
<label="Head":>class Head() : TagWithText("head") {
class object : Factory<Head> {
override fun create() = Head()
}
<label="title"/>fun title(init : Title.() -> Unit) = initTag(init)
}
<label="Title":>class Title() : TagWithText("title")
<label="BodyTag":>abstract class BodyTag(name : String) : TagWithText(name) {
}
<label="Body":>class Body() : BodyTag("body") {
class object : Factory<Body> {
override fun create() = Body()
}
<label="b"/>fun b(init : B.() -> Unit) = initTag(init)
<label="p"/>fun p(init : P.() -> Unit) = initTag(init)
<label="h1"/>fun h1(init : H1.() -> Unit) = initTag(init)
<label="a"/>fun a(href : String, init : A.() -> Unit) {
val a = initTag(init)
a.href = href
}
}
class B() : BodyTag("b")
class P() : BodyTag("p")
class H1() : BodyTag("h1")
class A() : BodyTag("a") {
var href : String
get() = <ref="attributes":>attributes["href"]
set(value) { <ref="attributes":>attributes["href"] = value }
}
<label="html"/>fun html(init : HTML.() -> Unit) : HTML {
val html = HTML()
html.init()
return html
}
}
\ No newline at end of file
package hello
fun main(args : Array<String>) {
println("Hello, world!")
}
\ No newline at end of file
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
<div class="line"><code class="jet keyword">package</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">hello</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">main</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Array</code><code class="jet plain">&lt;</code><code class="jet plain">String</code><code class="jet plain">&gt;</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">println</code><code class="jet plain">(</code><code class="jet string">&quot;</code><code class="jet string">Hello,&nbsp;world!</code><code class="jet string">&quot;</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code></div></div></div></div>
\ No newline at end of file
var <a="s"/>allByDefault : Int?
\ No newline at end of file
var <a="s":>allByDefault : Int?
\ No newline at end of file
var <a="a">allByDefault : Int?</a>
\ No newline at end of file
var <class="class"/>allByDefault : Int?
\ No newline at end of file
var <class="class":>allByDefault : Int?
\ No newline at end of file
var <class="class">allByDefault : Int?</class>
\ No newline at end of file
var <label="label"/>allByDefault : Int?
\ No newline at end of file
var <label="label":>allByDefault : Int?
\ No newline at end of file
var <label="label">allByDefault : Int?</label>
\ No newline at end of file
var <ref="ref"/>allByDefault : Int?
\ No newline at end of file
var <ref="ref":>allByDefault : Int?
\ No newline at end of file
var <ref="ref">allByDefault : Int?</ref>
\ No newline at end of file
var <style="style"/>allByDefault : Int?
\ No newline at end of file
var <style="style":>allByDefault : Int?
\ No newline at end of file
var <style="style">allByDefault : Int?</style>
\ No newline at end of file
var <unresolved/>allByDefault : Int?
\ No newline at end of file
var <unresolved:>allByDefault : Int?
\ No newline at end of file
var <unresolved>allByDefault : Int?</unresolved>
\ No newline at end of file
var <warning/>allByDefault : Int?
\ No newline at end of file
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
<div class="line"><code class="jet keyword">var</code><code class="jet whitespace">&nbsp;</code><div class="jet warning"></div><code class="jet plain">allByDefault</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet plain">?</code></div></div></div></div>
\ No newline at end of file
var <warning:>allByDefault : Int?
\ No newline at end of file
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
<div class="line"><code class="jet keyword">var</code><code class="jet whitespace">&nbsp;</code><div class="jet warning"><code class="jet plain">allByDefault</code></div><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet plain">?</code></div></div></div></div>
\ No newline at end of file
var <warning>allByDefault : Int?</warning>
\ No newline at end of file
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
<div class="line"><code class="jet keyword">var</code><code class="jet whitespace">&nbsp;</code><div class="jet warning"><code class="jet plain">allByDefault</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet plain">?</code></div></div></div></div></div>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册