annotate src/beanshell.html.luan @ 91:76baf48ea36b

add translation
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 02 May 2025 17:17:52 -0600
parents 416bdc22a478
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
1 local Luan = require "luan:Luan.luan"
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
2 local error = Luan.error
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3 local pairs = Luan.pairs or error()
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
4 local Io = require "luan:Io.luan"
91
76baf48ea36b add translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 89
diff changeset
5 local Site_translator = require "luan:gpt/Site_translator.luan"
76baf48ea36b add translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 89
diff changeset
6 local get_lang = Site_translator.get_lang or error()
76baf48ea36b add translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 89
diff changeset
7 local text_writer = Site_translator.text_writer or error()
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
8 local Shared = require "site:/lib/Shared.luan"
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
9 local head = Shared.head or error()
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
10 local header = Shared.header or error()
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
11
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
12
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
13 local content = {
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
14 intro = {
45
14518d772090 start learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 44
diff changeset
15 title = [[Introduction]]
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
16 content = function()
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
17 %>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
18 <p><a href="https://beanshell.github.io/">BeanShell</a> is a <a href="https://en.wikipedia.org/wiki/Scripting_language">scripting language</a> based on Java which looks a lot like Java. It is much friendlier for beginners than Java is. If you learn BeanShell then learning Java will be much easier.</p>
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
19 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
20 end
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
21 }
45
14518d772090 start learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 44
diff changeset
22 access = {
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
23 title = [[Running BeanShell]]
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
24 content = function()
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
25 %>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
26 <p><a href="https://beanshell.github.io/download.html">Download bsh-xx.jar</a> and put it in your working directory.</p>
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
27
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
28 <code block>
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
29 ~/beanshell $ ls -F
88
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
30 bsh-2.0b4.jar bsh_console.sh*
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
31 ~/beanshell $ cat bsh_console.sh
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
32 #!/bin/bash
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
33
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
34 export CLASSPATH=bsh-2.0b4.jar
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
35 java bsh.Console &
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
36 ~/beanshell $
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
37 </code>
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
38
88
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
39 <p>Copy my <code>bsh_console.sh</code> into your working directory. A <code>jar</code> file contains compiled Java code. The <code>CLASSPATH</code> tells the <code>java</code> command where to find compiled Java code.</p>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
40
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
41 <p>Now you can run BeanShell:</p>
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
42
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
43 <code block>
88
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
44 ~/beanshell $ ./bsh_console.sh
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
45 ~/beanshell $
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
46 </code>
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
47
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
48 <p>You should see a new window that lets you interact with BeanShell. From now on I will mostly refer interactions in that window.</p>
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
49
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
50 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
51 end
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
52 }
45
14518d772090 start learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 44
diff changeset
53 start = {
14518d772090 start learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 44
diff changeset
54 title = [[Getting Started]]
41
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
55 content = function()
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
56 %>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
57 <p>From the window:</p>
46
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
58
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
59 <code block>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
60 bsh % pwd();
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
61 /Users/fschmidt/beanshell
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
62 bsh % print("Hello world!");
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
63 Hello world!
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
64 bsh % print(1+1);
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
65 2
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
66 bsh %
46
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
67 </code>
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
68
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
69 <p>The BeanShell <code>pwd</code> command is like the Bash <code>pwd</code> command, and the BeanShell <code>print</code> command is somewhat like the Bash <code>echo</code> command. But the syntax is different. BeanShell and Java have syntax like most programming languages. While Bash does <code>command arg1 arg2 arg3</code>, most programming languages do <code>command(arg1,arg2,arg3)</code>. In addition, Java requires a <code>;</code> at the end of a statement (command line).</p>
46
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
70
89
Franklin Schmidt <fschmidt@gmail.com>
parents: 88
diff changeset
71 <p><code>pwd</code> and <code>print</code> are only BeanShell commands. They are not in Java.</p>
Franklin Schmidt <fschmidt@gmail.com>
parents: 88
diff changeset
72
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
73 <p>Also note that Java has the standard arithmetic operators.</p>
46
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
74
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
75 <%
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
76 end
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
77 }
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
78 vars = {
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
79 title = [[Variables]]
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
80 content = function()
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
81 %>
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
82
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
83 <code block>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
84 bsh % String message = "Hello world!";
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
85 bsh % print(message);
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
86 Hello world!
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
87 bsh % int i = 2;
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
88 bsh % print(i);
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
89 2
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
90 bsh % print(i+1);
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
91 3
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
92 bsh % i = i + 5;
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
93 bsh % print(i);
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
94 7
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
95 bsh %
47
84dd3edd03e9 learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 46
diff changeset
96 </code>
84dd3edd03e9 learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 46
diff changeset
97
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
98 <p>Variables hold values. In Java (but not BeanShell), variables must be declared with a type. The type <code>String</code> is for text, and <code>int</code> is for integers.</p>
47
84dd3edd03e9 learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 46
diff changeset
99
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
100 <p>The <code>=</code> command assigns a value to a variable.</p>
47
84dd3edd03e9 learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 46
diff changeset
101
84dd3edd03e9 learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 46
diff changeset
102 <%
84dd3edd03e9 learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 46
diff changeset
103 end
84dd3edd03e9 learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 46
diff changeset
104 }
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
105 objects = {
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
106 title = [[Objects and Strings]]
49
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
107 content = function()
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
108 %>
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
109
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
110 <code block>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
111 bsh % print( message.toUpperCase() );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
112 HELLO WORLD!
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
113 bsh % print( message.length() );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
114 12
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
115 bsh % print( message.getClass() );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
116 class java.lang.String
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
117 bsh %
49
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
118 </code>
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
119
88
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
120 <p>Java is an object-oriented language which means that it mostly deals with objects. I will explain with real-world examples. To show a dog or a toaster, I would do something like <code>show(dog)</code> or <code>show(toaster)</code>. Showing is something I do to these objects, it is not built into the objects. In contrast, to have a dog run I would do <code>dog.run()</code>, and to have a toaster toast bread I would do <code>toaster.toast(bread)</code>. Running is a function built into dogs, while toasting is built into toasters. Functions that are built into objects are called "member functions".</p>
49
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
121
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
122 <p>But actually this goes deeper. Dogs are a type of canine and all canines can run. So the ability of dogs to run actually comes from them being canines. In Java, we would call dogs, canines, and toasters "classes", and we would say that dogs are a subclass of canines, and that canines are a superclass of dogs.</p>
49
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
123
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
124 <p>Back to programming. The class of <code>message</code> (a String) is <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html">java.lang.String</a>. Click that link and see all the things that strings can do. For example, they can <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#toUpperCase--">toUpperCase</a> and <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#length--">length</a>. These functions return values. Strings can also <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--">getClass</a> but this functionality comes from the superclass <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html">java.lang.Object</a>. Objects are the base class of everything. Look again at the top of <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html">java.lang.String</a> and you will see the class hierarchy and see that String is a subclass of Object.</p>
49
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
125
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
126 <%
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
127 end
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
128 }
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
129 interfaces = {
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
130 title = [[Interfaces and Lists]]
49
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
131 content = function()
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
132 %>
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
133
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
134 <code block>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
135 bsh % List list = new ArrayList();
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
136 bsh % print( list );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
137 []
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
138 bsh % print( list.size() );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
139 0
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
140 bsh % list.add("a");
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
141 bsh % print( list );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
142 [a]
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
143 bsh % print( list.size() );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
144 1
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
145 bsh % list.add("b");
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
146 bsh % list.add("c");
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
147 bsh % print( list );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
148 [a, b, c]
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
149 bsh % print( list.size() );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
150 3
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
151 bsh % print( list.get(0) );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
152 a
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
153 bsh % print( list.get(1) );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
154 b
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
155 bsh % print( list.getClass() );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
156 class java.util.ArrayList
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
157 bsh %
49
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
158 </code>
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
159
88
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
160 <p><a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html">java.util.ArrayList</a> is a class. To make a new object of a class, we use the <code>new</code> operator. If you look at the top of the ArrayList page, you will see "All Implemented Interfaces:" which includes "List" and clicking that takes you to <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html">java.util.List</a>. List is an interface which you can think of as a purely abstract class. An interface only specifies what an object does, not how. A concrete class like ArrayList specifies how objects do what they do (the implementation) so that the object can actually do these actions. Note that an interface can be implemented/subclassed by multiple classes that implement the interface in different ways. You can see this in <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html">java.util.List</a> under "All Known Implementing Classes:".</p>
49
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
161
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
162 <p>Note that the first index of a list is 0 not 1. So the last index of a list is <code>list.size() - 1</code>.</p>
49
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
163
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
164 <p>Java organizes classes into packages. The package of List and ArrayList is <a href="https://docs.oracle.com/javase/8/docs/api/java/util/package-summary.html">java.util</a>. It is full of useful classes. Java has a huge number of standard classes, and I am not going to go over any more classes than needed to convey the core concepts of Java. You can learn the classes you need on your own.</p>
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
165
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
166
41
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
167 <%
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
168 end
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
169 }
88
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
170 boolean = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
171 title = [[Boolean Values and Equality]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
172 content = function()
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
173 %>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
174
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
175 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
176 bsh % print( 3 > 4 );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
177 false
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
178 bsh % print( 3 >= 4 );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
179 false
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
180 bsh % print( 3 < 4 );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
181 true
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
182 bsh % print( 3 <= 4 );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
183 true
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
184 bsh % print( 3 == 4 );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
185 false
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
186 bsh % print( 3 != 4 );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
187 true
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
188 bsh % print( 3 < 4 && 3 > 4 );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
189 false
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
190 bsh % print( 3 < 4 || 3 > 4 );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
191 true
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
192 bsh % boolean b = 3 < 4;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
193 bsh % print(b);
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
194 true
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
195 bsh % print( b == true );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
196 true
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
197 bsh %
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
198 </code>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
199
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
200 <p><code>==</code> checks for equality, <code>!=</code> checks for inequality, <code>&&</code> is for "and", and <code>||</code> is for "or". These are boolean operators that return boolean values, unlike something like <code>+</code> which is an arithmetic operator. <code>boolean</code> is a type than can have the values <code>true</code> or <code>false</code>.</p>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
201
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
202 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
203 bsh % String s1 = new String("hi");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
204 bsh % String s2 = new String("hi");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
205 bsh % print( s1 == s2 );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
206 false
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
207 bsh % print( s1.equals(s2) );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
208 true
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
209 bsh % String s3 = s1;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
210 bsh % print( s1 == s3 );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
211 true
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
212 bsh %
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
213 </code>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
214
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
215 <p>If you have two objects in the physical world that are identical, then they are not the same object but they are equivalent objects. In Java, <code>object1 == object2</code> checks whether object1 and object2 refer to the same object. Object variables refer to objects, they don't contain the object's value. <code>object1.equals(object2)</code> checks for object equivalence.</p>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
216
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
217 <p>The types <code>int</code> and <code>boolean</code> are primitive types. They are not objects. Primitive type variables contain primitive values, so they don't refer to anything. So in this case, <code>==</code> checks for equal values.</p>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
218
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
219 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
220 end
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
221 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
222 file = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
223 title = [[Run File and Comment]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
224 content = function()
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
225 %>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
226
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
227 <p>Now I will return to the Bash command line.</p>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
228
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
229 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
230 ~/beanshell $ ls -F
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
231 bsh-2.0b4.jar bsh.sh* bsh_console.sh* code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
232 ~/beanshell $ cat bsh.sh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
233 #!/bin/bash
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
234
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
235 export CLASSPATH=bsh-2.0b4.jar
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
236 java bsh.Interpreter $*
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
237 ~/beanshell $ cat code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
238 /* This is a comment */
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
239 // This is also a comment
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
240
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
241 print("Hi");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
242 print("Bye");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
243
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
244 ~/beanshell $ ./bsh.sh code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
245 Hi
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
246 Bye
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
247 ~/beanshell $
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
248 </code>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
249
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
250 <p><code>bsh.sh</code> runs a BeanShell file from the command line. I will keep modifying <code>code.bsh</code> to show my examples.</p>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
251
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
252 <p> In Java, comments are between <code>/*</code> and <code>*/</code> or between <code>//</code> and the end of the line. Comments are ignored.</p>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
253 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
254 end
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
255 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
256 ifs = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
257 title = [[If Statements]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
258 content = function()
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
259 %>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
260
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
261 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
262 ~/beanshell $ cat code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
263 int x = 5;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
264
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
265 print("first if");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
266 if( x == 5 ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
267 print("x == 5");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
268 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
269
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
270 print("second if");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
271 if( x > 5 ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
272 print("x > 5");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
273 } else {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
274 print("x <= 5");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
275 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
276
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
277 print("third if");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
278 if( x > 5 ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
279 print("x > 5");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
280 } else if( x < 5 ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
281 print("x < 5");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
282 } else {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
283 print("x == 5");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
284 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
285
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
286 ~/beanshell $ ./bsh.sh code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
287 first if
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
288 x == 5
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
289 second if
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
290 x <= 5
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
291 third if
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
292 x == 5
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
293 ~/beanshell $
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
294 </code>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
295
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
296 <p><code>if</code> statements take a boolean argument.</p>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
297
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
298 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
299 end
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
300 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
301 loops = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
302 title = [[Loops]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
303 content = function()
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
304 %>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
305
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
306 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
307 ~/beanshell $ cat code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
308 ~/beanshell $ cat code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
309 print("first loop");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
310 int i = 1;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
311 while( i <= 3 ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
312 print(i);
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
313 i = i + 1;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
314 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
315
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
316 print("second loop");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
317 for( int i = 1; i <= 3; i = i + 1 ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
318 print(i);
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
319 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
320
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
321 List list = new ArrayList();
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
322 list.add("a");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
323 list.add("b");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
324 list.add("c");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
325
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
326 print("third loop");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
327 for( int i = 0; i < list.size(); i = i + 1 ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
328 String s = list.get(i);
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
329 print(s);
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
330 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
331
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
332 print("fourth loop");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
333 Iterator iter = list.iterator();
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
334 while( iter.hasNext() ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
335 String s = iter.next();
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
336 print(s);
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
337 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
338
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
339 print("fifth loop");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
340 for( String s : list ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
341 print(s);
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
342 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
343
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
344 ~/beanshell $ ./bsh.sh code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
345 first loop
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
346 1
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
347 2
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
348 3
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
349 second loop
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
350 1
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
351 2
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
352 3
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
353 third loop
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
354 a
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
355 b
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
356 c
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
357 fourth loop
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
358 a
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
359 b
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
360 c
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
361 fifth loop
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
362 a
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
363 b
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
364 c
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
365 ~/beanshell $
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
366 </code>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
367
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
368 <p>The first form of the <code>for</code> loop has three elements: an initialization statement, a loop condition, and a statement that is run after each iteration of the loop. The second form of the <code>for</code> loop iterates through anything that is iterable, returning values in sequence. For the fourth loop, see <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html#iterator--">List.iterator()</a>.</p>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
369
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
370 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
371 end
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
372 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
373 blocks = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
374 title = [[Blocks]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
375 content = function()
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
376 %>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
377
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
378 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
379 ~/beanshell $ cat code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
380 {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
381 String s = "ok";
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
382 print( "first " + s );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
383 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
384 print( "second " + s );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
385
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
386 ~/beanshell $ ./bsh.sh code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
387 first ok
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
388 second void
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
389 ~/beanshell $
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
390 </code>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
391
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
392 <p>Code between the braces <code>{</code> and <code>}</code> is a block. When braces are part of a statement like a <code>for</code> statement, the block extends to include the whole statement. Variables declared inside a block only exist within that block.</p>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
393
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
394 <p>In BeanShell an undefined variable is <code>void</code> but in Java you would get a compile error.</p>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
395
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
396 <p>Note that besides being an arithmetic operator, <code>+</code> also concatenates strings.</p>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
397 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
398 end
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
399 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
400 arrays = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
401 title = [[Arrays and null]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
402 content = function()
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
403 %>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
404 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
405 ~/beanshell $ cat code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
406 String[] array = { "a", "b", "c", "d", "e" };
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
407 print( "array = " + Arrays.asList(array) );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
408 print( "length = " + array.length );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
409 print( "array[1] = " + array[1] );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
410 array[1] = "bb";
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
411 print( "modified array = " + Arrays.asList(array) );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
412 print("loop");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
413 for( String s : array ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
414 print(s);
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
415 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
416
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
417 array = new String[3];
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
418 print( "new array = " + Arrays.asList(array) );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
419 array[2] = "two";
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
420 print( "modified new array = " + Arrays.asList(array) );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
421
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
422 ~/beanshell $ ./bsh.sh code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
423 array = [a, b, c, d, e]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
424 length = 5
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
425 array[1] = b
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
426 modified array = [a, bb, c, d, e]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
427 loop
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
428 a
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
429 bb
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
430 c
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
431 d
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
432 e
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
433 new array = [null, null, null]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
434 modified new array = [null, null, two]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
435 ~/beanshell $
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
436 </code>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
437
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
438 <p>Arrays are an anomaly - neither primitive type nor object. Arrays don't do anything that lists can't do. The reason that Java has arrays is because arrays are a fundamental low-level programming concept, and Java is a low-level language.</p>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
439
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
440 <p>Arrays are declared with the type that they will hold, and then they can only hold that type. Arrays cannot change size.</p>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
441
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
442 <p>Since arrays don't know how become strings, I used <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#asList-T...-">Arrays.asList()</a> which converts an array into a list so that it can be displayed properly. Note that this is a <code>static</code> function which means that it isn't part of an object, but rather is a general function that is associated with a class.</p>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
443
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
444 <p>In the second part of the code, I assign <code>array</code> to a new array of length 3 with no values. Java uses the special value <code>null</code> to mean no value.</p>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
445 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
446 end
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
447 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
448 fns = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
449 title = [[Functions]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
450 content = function()
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
451 %>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
452 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
453 ~/beanshell $ cat code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
454 int add(int x,int y) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
455 return x + y;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
456 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
457
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
458 void addAndShow(int x,int y) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
459 int sum = x + y;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
460 print( x + " + " + y + " = " + sum );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
461 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
462
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
463 void sayBye() {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
464 print("Bye");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
465 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
466
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
467 print( "add(2,3) = " + add(2,3) );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
468 addAndShow(2,3);
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
469 sayBye();
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
470
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
471 ~/beanshell $ ./bsh.sh code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
472 add(2,3) = 5
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
473 2 + 3 = 5
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
474 Bye
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
475 ~/beanshell $
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
476 </code>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
477
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
478 <p>Functions make possible reusable code, and are the core concept of programming. In Java, function definitions start with the return type, then the function name, then the function parameters with types, and then a block that implements the function. A return type of <code>void</code> means nothing is returned.</p>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
479 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
480 end
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
481 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
482 impl = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
483 title = [[Implementing Interfaces]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
484 content = function()
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
485 %>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
486 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
487 ~/beanshell $ cat code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
488 Iterator iter = new Iterator() {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
489 int i = 0;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
490 boolean hasNext() {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
491 return i < 10;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
492 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
493 int next() {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
494 i = i + 1;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
495 return i;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
496 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
497 };
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
498
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
499 while( iter.hasNext() ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
500 print( iter.next() );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
501 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
502
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
503 ~/beanshell $ ./bsh.sh code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
504 1
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
505 2
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
506 3
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
507 4
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
508 5
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
509 6
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
510 7
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
511 8
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
512 9
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
513 10
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
514 ~/beanshell $
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
515 </code>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
516
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
517 <p>BeanShell doesn't let you implement new classes, you must use Java for that. But BeanShell does let you implement interfaces which is similar to implementing a new class. In this case, I implement <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html">Iterator</a> which defines two member functions which must be implemented. Typically an implementation will include both member functions and member data/variables. The member data describes the state of the object, and the member functions often modify that state. This iterator counts from 1 to 10, and the member variable <code>i</code> keeps track of the current count.</p>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
518
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
519 <p>This example is just to give a taste of object-oriented programming. When you learn Java, you will learn much more about this.</p>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
520 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
521 end
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
522 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
523 conclusion = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
524 title = [[Conclusion]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
525 content = function()
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
526 %>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
527 <p>The purpose of this tutorial is to introduce basic Java concepts that will make learning Java easier. I avoided details and involved examples.</p>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
528
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
529 <p>When you are learning Java, I still think BeanShell is a useful tool for experimentation. You can quickly test things in BeanShell that would take longer to test in Java.</p>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
530 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
531 end
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
532 }
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
533 }
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
534
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
535
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
536 local function show_toc(content)
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
537 %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
538 <ul>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
539 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
540 for id, info in pairs(content) do
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
541 %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
542 <li><a id="c_<%=id%>" href="#<%=id%>"><%=info.title%></a></li>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
543 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
544 end
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
545 %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
546 </ul>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
547 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
548 end
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
549
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
550 local function show_content(content,h)
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
551 for id, info in pairs(content) do
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
552 %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
553 <div heading>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
554 <h<%=h%>><a id="<%=id%>" href="#<%=id%>"><%=info.title%></a></h<%=h%>>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
555 <a href="#c_<%=id%>">contents</a>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
556 </div>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
557 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
558 info.content()
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
559 end
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
560 end
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
561
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
562 return function()
91
76baf48ea36b add translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 89
diff changeset
563 Io.stdout = text_writer()
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
564 %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
565 <!doctype html>
91
76baf48ea36b add translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 89
diff changeset
566 <html lang="<%=get_lang()%>">
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
567 <head>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
568 <% head() %>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
569 <title>Reactionary BeanShell Tutorial</title>
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
570 </head>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
571 <body>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
572 <% header() %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
573 <div content>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
574 <h1><a href="beanshell.html">Reactionary BeanShell Tutorial</a></h1>
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
575 <hr>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
576 <h2>Contents</h2>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
577 <div toc>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
578 <% show_toc(content) %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
579 </div>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
580 <hr>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
581 <% show_content(content,2) %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
582 </div>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
583 </body>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
584 </html>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
585 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
586 end