{"id":1376,"date":"2021-04-02T19:38:35","date_gmt":"2021-04-03T02:38:35","guid":{"rendered":"https:\/\/coderpad-staging.io\/?post_type=programming-language&#038;p=1106"},"modified":"2023-04-17T04:02:56","modified_gmt":"2023-04-17T11:02:56","slug":"scala","status":"publish","type":"programming-language","link":"https:\/\/coderpad.io\/languages\/scala\/","title":{"rendered":"Scala"},"content":{"rendered":"\n<p>You should define an object named&nbsp;<code>Solution<\/code>&nbsp;that extends&nbsp;<code>App<\/code>, like so:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"Scala\" data-shcb-language-slug=\"scala\"><span><code class=\"hljs language-scala shcb-wrap-lines\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">object<\/span> <span class=\"hljs-title\">Solution<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">App<\/span> <\/span>{\n  <span class=\"hljs-keyword\">for<\/span> (i &lt;- <span class=\"hljs-number\">0<\/span> until <span class=\"hljs-number\">5<\/span>) println(<span class=\"hljs-string\">\"Hello, world!\"<\/span>)\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Scala<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">scala<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Alternatively, you can forego using the&nbsp;<code>App<\/code>&nbsp;trait helper and define&nbsp;<code>main<\/code>&nbsp;yourself:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"Scala\" data-shcb-language-slug=\"scala\"><span><code class=\"hljs language-scala shcb-wrap-lines\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">object<\/span> <span class=\"hljs-title\">Solution<\/span> <\/span>{\n  <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">main<\/span><\/span>(args: <span class=\"hljs-type\">Array<\/span>&#91;<span class=\"hljs-type\">String<\/span>]) = {\n    println(<span class=\"hljs-string\">\"Hello, world!\"<\/span>)\n  }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Scala<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">scala<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>We include the Scala testing libraries&nbsp;<a href=\"https:\/\/www.scalacheck.org\/\" target=\"_blank\" rel=\"noopener\">ScalaCheck<\/a>&nbsp;and&nbsp;<a href=\"http:\/\/www.scalatest.org\/\" target=\"_blank\" rel=\"noopener\">ScalaTest<\/a>&nbsp;for your convenience. Here&#8217;s a quick example of using ScalaTest driven by ScalaCheck generators:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"Scala\" data-shcb-language-slug=\"scala\"><span><code class=\"hljs language-scala shcb-wrap-lines\"><span class=\"hljs-keyword\">import<\/span> org.scalatest.freespec.<span class=\"hljs-type\">AnyFreeSpec<\/span>\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">SetSpec<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">AnyFreeSpec<\/span> <\/span>{\n\n  <span class=\"hljs-string\">\"A Set\"<\/span> - {\n    <span class=\"hljs-string\">\"when empty\"<\/span> - {\n      <span class=\"hljs-string\">\"should have size 0\"<\/span> in {\n        assert(<span class=\"hljs-type\">Set<\/span>.empty.size === <span class=\"hljs-number\">0<\/span>)\n      }\n\n      <span class=\"hljs-string\">\"should produce NoSuchElementException when head is invoked\"<\/span> in {\n        assertThrows&#91;<span class=\"hljs-type\">NoSuchElementException<\/span>] {\n          <span class=\"hljs-type\">Set<\/span>.empty.head\n        }\n      }\n    }\n  }\n}\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">object<\/span> <span class=\"hljs-title\">Solution<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">App<\/span> <\/span>{\n  <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-type\">SetSpec<\/span>().execute()\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Scala<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">scala<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Here&#8217;s a quick rundown of the Scala libraries we have installed:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"Scala\" data-shcb-language-slug=\"scala\"><span><code class=\"hljs language-scala shcb-wrap-lines\">libraryDependencies ++= <span class=\"hljs-type\">Seq<\/span> (\n  <span class=\"hljs-string\">\"com.chuusai\"<\/span>     %% <span class=\"hljs-string\">\"shapeless\"<\/span>                    % <span class=\"hljs-string\">\"2.3.7\"<\/span>,\n  <span class=\"hljs-string\">\"org.scalacheck\"<\/span>  %% <span class=\"hljs-string\">\"scalacheck\"<\/span>                   % <span class=\"hljs-string\">\"1.15.4\"<\/span>,\n  <span class=\"hljs-string\">\"org.scalactic\"<\/span>   %% <span class=\"hljs-string\">\"scalactic\"<\/span>                    % <span class=\"hljs-string\">\"3.2.10\"<\/span>,\n  <span class=\"hljs-string\">\"org.scalamock\"<\/span>   %% <span class=\"hljs-string\">\"scalamock\"<\/span>                    % <span class=\"hljs-string\">\"5.1.0\"<\/span>,\n  <span class=\"hljs-string\">\"org.scalatest\"<\/span>   %% <span class=\"hljs-string\">\"scalatest\"<\/span>                    % <span class=\"hljs-string\">\"3.2.10\"<\/span>,\n  <span class=\"hljs-string\">\"org.scalaz\"<\/span>      %% <span class=\"hljs-string\">\"scalaz-core\"<\/span>                  % <span class=\"hljs-string\">\"7.3.5\"<\/span>,\n  <span class=\"hljs-string\">\"org.typelevel\"<\/span>   %% <span class=\"hljs-string\">\"cats-core\"<\/span>                    % <span class=\"hljs-string\">\"2.6.1\"<\/span>\n)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Scala<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">scala<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Additionally, these Java libraries are available. Simply import and use as desired:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/code.google.com\/p\/json-simple\" target=\"_blank\" rel=\"noopener\">json-simple<\/a>&nbsp;for parsing\/encoding JSON.The google code project page has some&nbsp;<a href=\"https:\/\/code.google.com\/p\/json-simple\/wiki\/EncodingExamples\" target=\"_blank\" rel=\"noopener\">useful examples<\/a>.<\/li>\n\n\n\n<li><a href=\"https:\/\/code.google.com\/p\/guava-libraries\" target=\"_blank\" rel=\"noopener\">guava<\/a>&nbsp;provides immutable collections and other handy utility classes.<\/li>\n\n\n\n<li><a href=\"http:\/\/junit.org\/\" target=\"_blank\" rel=\"noopener\">junit<\/a>, the gold standard for testing in Java, but quite usable in Scala as well.import org.junit.Test <\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"Scala\" data-shcb-language-slug=\"scala\"><span><code class=\"hljs language-scala shcb-wrap-lines\"><span class=\"hljs-keyword\">import<\/span> org.junit.<span class=\"hljs-type\">Test<\/span>\n<span class=\"hljs-keyword\">import<\/span> org.junit.runner.<span class=\"hljs-type\">JUnitCore<\/span>\n<span class=\"hljs-keyword\">import<\/span> org.junit.<span class=\"hljs-type\">Assert<\/span>\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">TestClass<\/span> <\/span>{\n  <span class=\"hljs-meta\">@Test<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">testNoop<\/span><\/span>() = {\n    <span class=\"hljs-type\">Assert<\/span>.assertTrue(<span class=\"hljs-literal\">true<\/span>)\n  }\n}\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">object<\/span> <span class=\"hljs-title\">Solution<\/span> <\/span>{\n  <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">main<\/span><\/span>(args: <span class=\"hljs-type\">Array<\/span>&#91;<span class=\"hljs-type\">String<\/span>]) = {\n    <span class=\"hljs-type\">JUnitCore<\/span>.main(<span class=\"hljs-string\">\"TestClass\"<\/span>)\n  }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Scala<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">scala<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"http:\/\/www.jmock.org\/\" target=\"_blank\" rel=\"noopener\">jMock<\/a>, a library to assist with mocking in Java. The homepage has some useful examples, and can be adapted for Scala, too.<\/li>\n<\/ul>\n","protected":false},"parent":0,"menu_order":0,"template":"","class_list":["post-1376","programming-language","type-programming-language","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/coderpad.io\/wp-json\/wp\/v2\/programming-language\/1376","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/coderpad.io\/wp-json\/wp\/v2\/programming-language"}],"about":[{"href":"https:\/\/coderpad.io\/wp-json\/wp\/v2\/types\/programming-language"}],"wp:attachment":[{"href":"https:\/\/coderpad.io\/wp-json\/wp\/v2\/media?parent=1376"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}