annotate src/beanshell.html.luan @ 88:f320d444face

finish beanshell
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 22 Apr 2025 23:11:59 -0600
parents 5f4cc9d3d3cb
children 416bdc22a478
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"
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
5 local Http = require "luan:http/Http.luan"
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
6 local Shared = require "site:/lib/Shared.luan"
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
7 local head = Shared.head or error()
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
8 local header = Shared.header or error()
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
9
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
10
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
11 local content = {
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
12 intro = {
45
14518d772090 start learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 44
diff changeset
13 title = [[Introduction]]
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
14 content = function()
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
15 %>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
16 <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
17 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
18 end
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
19 }
45
14518d772090 start learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 44
diff changeset
20 access = {
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
21 title = [[Running BeanShell]]
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
22 content = function()
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
23 %>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
24 <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
25
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
26 <code block>
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
27 ~/beanshell $ ls -F
88
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
28 bsh-2.0b4.jar bsh_console.sh*
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
29 ~/beanshell $ cat bsh_console.sh
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
30 #!/bin/bash
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
31
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
32 export CLASSPATH=bsh-2.0b4.jar
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
33 java bsh.Console &
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
34 ~/beanshell $
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
35 </code>
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
36
88
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
37 <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
38
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
39 <p>Now you can run BeanShell:</p>
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 <code block>
88
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
42 ~/beanshell $ ./bsh_console.sh
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
43 ~/beanshell $
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
44 </code>
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
45
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
46 <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
47
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
48 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
49 end
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
50 }
45
14518d772090 start learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 44
diff changeset
51 start = {
14518d772090 start learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 44
diff changeset
52 title = [[Getting Started]]
41
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
53 content = function()
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
54 %>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
55 <p>From the window:</p>
46
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
56
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
57 <code block>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
58 bsh % pwd();
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
59 /Users/fschmidt/beanshell
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
60 bsh % print("Hello world!");
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
61 Hello world!
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
62 bsh % print(1+1);
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
63 2
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
64 bsh %
46
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
65 </code>
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
66
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
67 <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
68
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
69 <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
70
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
71 <%
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
72 end
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
73 }
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
74 vars = {
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
75 title = [[Variables]]
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
76 content = function()
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
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
79 <code block>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
80 bsh % String message = "Hello world!";
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
81 bsh % print(message);
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
82 Hello world!
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
83 bsh % int i = 2;
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
84 bsh % print(i);
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
85 2
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
86 bsh % print(i+1);
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
87 3
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
88 bsh % i = i + 5;
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
89 bsh % print(i);
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
90 7
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
91 bsh %
47
84dd3edd03e9 learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 46
diff changeset
92 </code>
84dd3edd03e9 learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 46
diff changeset
93
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
94 <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
95
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
96 <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
97
84dd3edd03e9 learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 46
diff changeset
98 <%
84dd3edd03e9 learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 46
diff changeset
99 end
84dd3edd03e9 learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 46
diff changeset
100 }
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
101 objects = {
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
102 title = [[Objects and Strings]]
49
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
103 content = function()
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
104 %>
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
105
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
106 <code block>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
107 bsh % print( message.toUpperCase() );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
108 HELLO WORLD!
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
109 bsh % print( message.length() );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
110 12
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
111 bsh % print( message.getClass() );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
112 class java.lang.String
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
113 bsh %
49
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
114 </code>
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
115
88
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
116 <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
117
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
118 <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
119
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
120 <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
121
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
122 <%
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
123 end
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
124 }
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
125 interfaces = {
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
126 title = [[Interfaces and Lists]]
49
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
127 content = function()
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
128 %>
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
129
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
130 <code block>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
131 bsh % List list = new ArrayList();
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
132 bsh % print( list );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
133 []
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
134 bsh % print( list.size() );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
135 0
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
136 bsh % list.add("a");
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
137 bsh % print( list );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
138 [a]
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
139 bsh % print( list.size() );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
140 1
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
141 bsh % list.add("b");
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
142 bsh % list.add("c");
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
143 bsh % print( list );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
144 [a, b, c]
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
145 bsh % print( list.size() );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
146 3
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
147 bsh % print( list.get(0) );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
148 a
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
149 bsh % print( list.get(1) );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
150 b
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
151 bsh % print( list.getClass() );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
152 class java.util.ArrayList
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
153 bsh %
49
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
154 </code>
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
155
88
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
156 <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
157
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
158 <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
159
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
160 <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
161
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
162
41
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
163 <%
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
164 end
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
165 }
88
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
166 boolean = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
167 title = [[Boolean Values and Equality]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
168 content = function()
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
169 %>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
170
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
171 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
172 bsh % print( 3 > 4 );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
173 false
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
174 bsh % print( 3 >= 4 );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
175 false
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 true
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 true
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 false
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 && 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 || 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 % boolean b = 3 < 4;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
189 bsh % print(b);
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
190 true
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
191 bsh % print( b == true );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
192 true
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
193 bsh %
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
194 </code>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
195
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
196 <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
197
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
198 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
199 bsh % String s1 = new String("hi");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
200 bsh % String s2 = new String("hi");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
201 bsh % print( s1 == s2 );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
202 false
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
203 bsh % print( s1.equals(s2) );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
204 true
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
205 bsh % String s3 = s1;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
206 bsh % print( s1 == s3 );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
207 true
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
208 bsh %
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
209 </code>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
210
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
211 <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
212
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
213 <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
214
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
215 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
216 end
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
217 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
218 file = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
219 title = [[Run File and Comment]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
220 content = function()
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
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
223 <p>Now I will return to the Bash command line.</p>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
224
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
225 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
226 ~/beanshell $ ls -F
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
227 bsh-2.0b4.jar bsh.sh* bsh_console.sh* code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
228 ~/beanshell $ cat bsh.sh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
229 #!/bin/bash
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
230
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
231 export CLASSPATH=bsh-2.0b4.jar
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
232 java bsh.Interpreter $*
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
233 ~/beanshell $ cat code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
234 /* This is a comment */
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
235 // This is also a comment
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
236
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
237 print("Hi");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
238 print("Bye");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
239
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
240 ~/beanshell $ ./bsh.sh code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
241 Hi
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
242 Bye
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
243 ~/beanshell $
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
244 </code>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
245
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
246 <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
247
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
248 <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
249 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
250 end
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 ifs = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
253 title = [[If Statements]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
254 content = function()
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
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
257 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
258 ~/beanshell $ cat code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
259 int x = 5;
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 print("first if");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
262 if( x == 5 ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
263 print("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
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
266 print("second if");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
267 if( x > 5 ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
268 print("x > 5");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
269 } else {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
270 print("x <= 5");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
271 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
272
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
273 print("third if");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
274 if( x > 5 ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
275 print("x > 5");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
276 } else if( x < 5 ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
277 print("x < 5");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
278 } else {
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 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
281
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
282 ~/beanshell $ ./bsh.sh code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
283 first if
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
284 x == 5
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
285 second if
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
286 x <= 5
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
287 third 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 ~/beanshell $
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
290 </code>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
291
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
292 <p><code>if</code> statements take a boolean argument.</p>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
293
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
294 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
295 end
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
296 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
297 loops = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
298 title = [[Loops]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
299 content = function()
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
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
302 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
303 ~/beanshell $ cat code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
304 ~/beanshell $ cat code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
305 print("first loop");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
306 int i = 1;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
307 while( i <= 3 ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
308 print(i);
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
309 i = i + 1;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
310 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
311
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
312 print("second loop");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
313 for( int i = 1; i <= 3; i = i + 1 ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
314 print(i);
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
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
317 List list = new ArrayList();
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
318 list.add("a");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
319 list.add("b");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
320 list.add("c");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
321
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
322 print("third loop");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
323 for( int i = 0; i < list.size(); i = i + 1 ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
324 String s = list.get(i);
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
325 print(s);
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
326 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
327
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
328 print("fourth loop");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
329 Iterator iter = list.iterator();
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
330 while( iter.hasNext() ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
331 String s = iter.next();
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
332 print(s);
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
333 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
334
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
335 print("fifth loop");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
336 for( String s : list ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
337 print(s);
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
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
340 ~/beanshell $ ./bsh.sh code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
341 first loop
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
342 1
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
343 2
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
344 3
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
345 second 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 third loop
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
350 a
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
351 b
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
352 c
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
353 fourth 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 fifth 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 ~/beanshell $
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
362 </code>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
363
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
364 <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
365
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
366 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
367 end
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
368 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
369 blocks = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
370 title = [[Blocks]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
371 content = function()
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
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
374 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
375 ~/beanshell $ cat code.bsh
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 String s = "ok";
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
378 print( "first " + s );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
379 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
380 print( "second " + s );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
381
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
382 ~/beanshell $ ./bsh.sh code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
383 first ok
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
384 second void
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
385 ~/beanshell $
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
386 </code>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
387
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
388 <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
389
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
390 <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
391
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
392 <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
393 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
394 end
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 arrays = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
397 title = [[Arrays and null]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
398 content = function()
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 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
401 ~/beanshell $ cat code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
402 String[] array = { "a", "b", "c", "d", "e" };
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
403 print( "array = " + Arrays.asList(array) );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
404 print( "length = " + array.length );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
405 print( "array[1] = " + array[1] );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
406 array[1] = "bb";
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
407 print( "modified array = " + Arrays.asList(array) );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
408 print("loop");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
409 for( String s : array ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
410 print(s);
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
411 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
412
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
413 array = new String[3];
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
414 print( "new array = " + Arrays.asList(array) );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
415 array[2] = "two";
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
416 print( "modified new array = " + Arrays.asList(array) );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
417
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
418 ~/beanshell $ ./bsh.sh code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
419 array = [a, b, c, d, e]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
420 length = 5
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
421 array[1] = b
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
422 modified array = [a, bb, c, d, e]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
423 loop
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
424 a
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
425 bb
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
426 c
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
427 d
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
428 e
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
429 new array = [null, null, null]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
430 modified new array = [null, null, two]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
431 ~/beanshell $
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
432 </code>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
433
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
434 <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
435
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
436 <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
437
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
438 <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
439
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
440 <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
441 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
442 end
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 fns = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
445 title = [[Functions]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
446 content = function()
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 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
449 ~/beanshell $ cat code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
450 int add(int x,int y) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
451 return x + y;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
452 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
453
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
454 void addAndShow(int x,int y) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
455 int sum = x + y;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
456 print( x + " + " + y + " = " + sum );
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
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
459 void sayBye() {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
460 print("Bye");
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 print( "add(2,3) = " + add(2,3) );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
464 addAndShow(2,3);
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
465 sayBye();
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 ~/beanshell $ ./bsh.sh code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
468 add(2,3) = 5
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
469 2 + 3 = 5
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
470 Bye
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
471 ~/beanshell $
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
472 </code>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
473
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
474 <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
475 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
476 end
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 impl = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
479 title = [[Implementing Interfaces]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
480 content = function()
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 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
483 ~/beanshell $ cat code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
484 Iterator iter = new Iterator() {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
485 int i = 0;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
486 boolean hasNext() {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
487 return i < 10;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
488 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
489 int next() {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
490 i = i + 1;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
491 return i;
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 };
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
494
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
495 while( iter.hasNext() ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
496 print( iter.next() );
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 ~/beanshell $ ./bsh.sh code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
500 1
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
501 2
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
502 3
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
503 4
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
504 5
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
505 6
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
506 7
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
507 8
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
508 9
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
509 10
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
510 ~/beanshell $
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
511 </code>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
512
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
513 <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
514
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
515 <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
516 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
517 end
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 conclusion = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
520 title = [[Conclusion]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
521 content = function()
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 <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
524
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
525 <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
526 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
527 end
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
528 }
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
529 }
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
530
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
531
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
532 local function show_toc(content)
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 <ul>
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 for id, info in pairs(content) do
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 <li><a id="c_<%=id%>" href="#<%=id%>"><%=info.title%></a></li>
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 end
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 </ul>
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 local function show_content(content,h)
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
547 for id, info in pairs(content) do
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
548 %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
549 <div heading>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
550 <h<%=h%>><a id="<%=id%>" href="#<%=id%>"><%=info.title%></a></h<%=h%>>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
551 <a href="#c_<%=id%>">contents</a>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
552 </div>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
553 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
554 info.content()
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
555 end
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
556 end
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 return function()
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
559 Io.stdout = Http.response.text_writer()
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
560 %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
561 <!doctype html>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
562 <html>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
563 <head>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
564 <% head() %>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
565 <title>Reactionary BeanShell Tutorial</title>
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
566 </head>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
567 <body>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
568 <% header() %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
569 <div content>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
570 <h1><a href="beanshell.html">Reactionary BeanShell Tutorial</a></h1>
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
571 <hr>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
572 <h2>Contents</h2>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
573 <div toc>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
574 <% show_toc(content) %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
575 </div>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
576 <hr>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
577 <% show_content(content,2) %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
578 </div>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
579 </body>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
580 </html>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
581 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
582 end