Пара простых вещей (про аргументы командной строки + Java/Scala и чуть-чуть про NetBeans)
Самый популярный и набивший оскомину пример HelloWorld встречается, наверное, уже во всех учебниках по программированию:
// Пример из туториала: http://download.oracle.com/javase/tutorial/getStarted/application/index.html
class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!"); // Display the string.
}
}
Здесь String[] args — аргументы командной строки.
Например:
java HelloWorldApp 1 2
означает, что args будет равно {“1”, “2”}.
Рассмотрим как работать с этими аргументами.
Если передается всего один аргумент (например, “debug”), то все очень просто — можно подсмотреть пример из туториала: cmdLineArgs.
В случае, если аргументов много (как в гнусных линуксовых командах), то можно использовать какую-нибудь готовую библиотеку:
Для большинства задач их вполне достаточно. В том случае, если хочется большего разнообразия, то можно посмотреть другие варианты здесь или в поисковиках.
В том случае, если аргументы не такие сложные и не слишком простые, а что-то среднее, то тянуть для этих целей дополнительную библиотеку нет никакого смысла. Например, если нужно передать что-то вроде: “-x -size 1024 -v”.
Обычно это бывает, когда требуется небольшая, почти “одноразовая” программа…
Многие настолько не любят писать разбор таких аргументов, что лепят все параметры в системные свойства (java … -Dfoo=”some string”), чтобы потом дергать их через System.getProperty().
Это конечно удобно, но не всегда нормально.
Проще написать разбор обычными стандартными средствами:
public class App {
public static void main(String[] args) {
boolean v = false, x = false;
int size = 0;
for (int i=0;i
В Scala все то же самое.
Тривиальный случай – делаем как в примере на официальном сайте: Snippet: Match Arguments.
Что-то очень сложное – подключаем сторонние библиотеки для разбора аргументов командной строки (ту же апачевскую или jopt).
В том случае, если что-то среднее, то можно написать на чистой Scala:
object App {
def main(args:Array[String]) = {
var v = false; var x = false; var size = 0
("" +: args :+ "") reduceLeft ( (i, j) => {
i match {
case "-v" => v = true
case "-size" => size = j.toInt
case "-x" => x = true
case _ =>
}; j
})
println("v =" + v )
println("x = " + x)
println("size = " + size)
}
}
Пару слов про reduceLeft. По сути этот тот же foldLeft, только начинается с первого элемента коллекции. Подробнее можно почитать в Scala API по работе с коллекциями.
Про другую известную многим фишку, о которой хотел рассказать — макросы в NetBeans-ах.
Точнее, про самый популярный макрос - debug-var. Вызывается по нажатию: Ctrl-J D.
Вообще макросы в нетбинсах есть уже много лет, по-крайне мере, когда я только начинал использовать нетбинс (3.* версии), они уже там были.
Например, для Scala можно сделать макрос, который будет вставлять в код: println("var=" + var)
Настроить можно здесь:
Tools -> Option -> Editor -> Macros
Про другие полезные макросы можно почитать здесь