annotate src/beanshell.html.luan @ 90:0dced626778b default tip

minor
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 23 Apr 2025 20:10:03 -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"
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
89
Franklin Schmidt <fschmidt@gmail.com>
parents: 88
diff changeset
69 <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
70
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
71 <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
72
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 end
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 vars = {
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
77 title = [[Variables]]
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
78 content = function()
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
79 %>
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
80
89fdc29b296f learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
81 <code block>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
82 bsh % String message = "Hello world!";
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
83 bsh % print(message);
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
84 Hello world!
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
85 bsh % int i = 2;
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
86 bsh % print(i);
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
87 2
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
88 bsh % print(i+1);
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
89 3
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
90 bsh % i = i + 5;
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
91 bsh % print(i);
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
92 7
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
93 bsh %
47
84dd3edd03e9 learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 46
diff changeset
94 </code>
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>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
97
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
98 <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
99
84dd3edd03e9 learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 46
diff changeset
100 <%
84dd3edd03e9 learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 46
diff changeset
101 end
84dd3edd03e9 learn_bash work
Franklin Schmidt <fschmidt@gmail.com>
parents: 46
diff changeset
102 }
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
103 objects = {
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
104 title = [[Objects and Strings]]
49
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
105 content = function()
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
106 %>
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
107
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
108 <code block>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
109 bsh % print( message.toUpperCase() );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
110 HELLO WORLD!
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
111 bsh % print( message.length() );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
112 12
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
113 bsh % print( message.getClass() );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
114 class java.lang.String
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
115 bsh %
49
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
116 </code>
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
117
88
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
118 <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
119
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
120 <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
121
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
122 <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
123
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
124 <%
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
125 end
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
126 }
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
127 interfaces = {
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
128 title = [[Interfaces and Lists]]
49
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
129 content = function()
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
130 %>
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
131
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
132 <code block>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
133 bsh % List list = new ArrayList();
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
134 bsh % print( list );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
135 []
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
136 bsh % print( list.size() );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
137 0
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
138 bsh % list.add("a");
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
139 bsh % print( list );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
140 [a]
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
141 bsh % print( list.size() );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
142 1
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
143 bsh % list.add("b");
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
144 bsh % list.add("c");
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
145 bsh % print( list );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
146 [a, b, c]
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
147 bsh % print( list.size() );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
148 3
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
149 bsh % print( list.get(0) );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
150 a
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
151 bsh % print( list.get(1) );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
152 b
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
153 bsh % print( list.getClass() );
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
154 class java.util.ArrayList
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
155 bsh %
49
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
156 </code>
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 48
diff changeset
157
88
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
158 <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
159
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
160 <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
161
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
162 <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
163
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
164
41
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
165 <%
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
166 end
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
167 }
88
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
168 boolean = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
169 title = [[Boolean Values and Equality]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
170 content = function()
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
171 %>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
172
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
173 <code block>
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 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 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 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 false
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 true
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 false
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 true
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
190 bsh % boolean b = 3 < 4;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
191 bsh % print(b);
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 % print( b == true );
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 %
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
196 </code>
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 <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
199
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
200 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
201 bsh % String s1 = new String("hi");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
202 bsh % String s2 = new String("hi");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
203 bsh % print( s1 == s2 );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
204 false
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
205 bsh % print( s1.equals(s2) );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
206 true
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
207 bsh % String s3 = s1;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
208 bsh % print( s1 == s3 );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
209 true
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
210 bsh %
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
211 </code>
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>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
214
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
215 <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
216
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 end
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 file = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
221 title = [[Run File and Comment]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
222 content = function()
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
223 %>
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 <p>Now I will return to the Bash command line.</p>
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 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
228 ~/beanshell $ ls -F
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
229 bsh-2.0b4.jar bsh.sh* bsh_console.sh* code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
230 ~/beanshell $ cat bsh.sh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
231 #!/bin/bash
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
232
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
233 export CLASSPATH=bsh-2.0b4.jar
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
234 java bsh.Interpreter $*
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
235 ~/beanshell $ cat code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
236 /* This is a comment */
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
237 // This is also a comment
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
238
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
239 print("Hi");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
240 print("Bye");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
241
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
242 ~/beanshell $ ./bsh.sh code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
243 Hi
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
244 Bye
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
245 ~/beanshell $
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
246 </code>
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><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
249
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
250 <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
251 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
252 end
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 ifs = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
255 title = [[If Statements]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
256 content = function()
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
257 %>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
258
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
259 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
260 ~/beanshell $ cat code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
261 int x = 5;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
262
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
263 print("first if");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
264 if( x == 5 ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
265 print("x == 5");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
266 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
267
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
268 print("second if");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
269 if( x > 5 ) {
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 } else {
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 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
274
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
275 print("third if");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
276 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 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 {
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 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
283
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
284 ~/beanshell $ ./bsh.sh code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
285 first 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 second 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 third 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 ~/beanshell $
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
292 </code>
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 <p><code>if</code> statements take a boolean argument.</p>
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 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
297 end
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 loops = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
300 title = [[Loops]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
301 content = function()
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
302 %>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
303
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
304 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
305 ~/beanshell $ cat code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
306 ~/beanshell $ cat code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
307 print("first loop");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
308 int i = 1;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
309 while( i <= 3 ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
310 print(i);
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
311 i = i + 1;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
312 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
313
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
314 print("second loop");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
315 for( int i = 1; i <= 3; i = i + 1 ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
316 print(i);
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
317 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
318
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
319 List list = new ArrayList();
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
320 list.add("a");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
321 list.add("b");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
322 list.add("c");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
323
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
324 print("third loop");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
325 for( int i = 0; i < list.size(); i = i + 1 ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
326 String s = list.get(i);
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
327 print(s);
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
328 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
329
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
330 print("fourth loop");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
331 Iterator iter = list.iterator();
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
332 while( iter.hasNext() ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
333 String s = iter.next();
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
334 print(s);
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
335 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
336
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
337 print("fifth loop");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
338 for( String s : list ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
339 print(s);
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
340 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
341
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
342 ~/beanshell $ ./bsh.sh code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
343 first loop
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
344 1
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
345 2
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
346 3
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
347 second loop
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
348 1
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
349 2
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
350 3
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
351 third loop
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
352 a
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
353 b
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
354 c
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
355 fourth loop
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
356 a
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
357 b
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
358 c
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
359 fifth loop
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
360 a
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
361 b
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
362 c
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
363 ~/beanshell $
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
364 </code>
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 <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
367
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 end
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 blocks = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
372 title = [[Blocks]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
373 content = function()
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
374 %>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
375
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
376 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
377 ~/beanshell $ cat code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
378 {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
379 String s = "ok";
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
380 print( "first " + 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 print( "second " + 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 ~/beanshell $ ./bsh.sh code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
385 first ok
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
386 second void
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
387 ~/beanshell $
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
388 </code>
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>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
391
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
392 <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
393
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
394 <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
395 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
396 end
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 arrays = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
399 title = [[Arrays and null]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
400 content = function()
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
401 %>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
402 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
403 ~/beanshell $ cat code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
404 String[] array = { "a", "b", "c", "d", "e" };
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
405 print( "array = " + Arrays.asList(array) );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
406 print( "length = " + array.length );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
407 print( "array[1] = " + array[1] );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
408 array[1] = "bb";
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
409 print( "modified array = " + Arrays.asList(array) );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
410 print("loop");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
411 for( String s : array ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
412 print(s);
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
413 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
414
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
415 array = new String[3];
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
416 print( "new array = " + Arrays.asList(array) );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
417 array[2] = "two";
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
418 print( "modified new array = " + Arrays.asList(array) );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
419
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
420 ~/beanshell $ ./bsh.sh code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
421 array = [a, b, c, d, e]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
422 length = 5
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
423 array[1] = b
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
424 modified array = [a, bb, c, d, e]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
425 loop
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
426 a
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
427 bb
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
428 c
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
429 d
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
430 e
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
431 new array = [null, null, null]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
432 modified new array = [null, null, two]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
433 ~/beanshell $
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
434 </code>
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 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
437
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
438 <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
439
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
440 <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
441
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
442 <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
443 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
444 end
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 fns = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
447 title = [[Functions]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
448 content = function()
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
449 %>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
450 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
451 ~/beanshell $ cat code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
452 int add(int x,int y) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
453 return x + y;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
454 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
455
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
456 void addAndShow(int x,int y) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
457 int sum = x + y;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
458 print( x + " + " + y + " = " + sum );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
459 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
460
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
461 void sayBye() {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
462 print("Bye");
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
463 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
464
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
465 print( "add(2,3) = " + add(2,3) );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
466 addAndShow(2,3);
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
467 sayBye();
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
468
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
469 ~/beanshell $ ./bsh.sh code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
470 add(2,3) = 5
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
471 2 + 3 = 5
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
472 Bye
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
473 ~/beanshell $
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
474 </code>
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 <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
477 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
478 end
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 impl = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
481 title = [[Implementing Interfaces]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
482 content = function()
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
483 %>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
484 <code block>
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
485 ~/beanshell $ cat code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
486 Iterator iter = new Iterator() {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
487 int i = 0;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
488 boolean hasNext() {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
489 return i < 10;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
490 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
491 int next() {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
492 i = i + 1;
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
493 return i;
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 };
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 while( iter.hasNext() ) {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
498 print( iter.next() );
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
499 }
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
500
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
501 ~/beanshell $ ./bsh.sh code.bsh
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
502 1
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
503 2
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
504 3
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
505 4
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
506 5
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
507 6
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
508 7
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
509 8
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
510 9
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
511 10
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
512 ~/beanshell $
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
513 </code>
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>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
516
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
517 <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
518 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
519 end
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 conclusion = {
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
522 title = [[Conclusion]]
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
523 content = function()
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>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
526
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
527 <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
528 <%
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
529 end
f320d444face finish beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 87
diff changeset
530 }
40
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
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 local function show_toc(content)
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 <ul>
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 for id, info in pairs(content) do
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 <li><a id="c_<%=id%>" href="#<%=id%>"><%=info.title%></a></li>
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 end
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 </ul>
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 end
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 local function show_content(content,h)
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
549 for id, info in pairs(content) do
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
550 %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
551 <div heading>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
552 <h<%=h%>><a id="<%=id%>" href="#<%=id%>"><%=info.title%></a></h<%=h%>>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
553 <a href="#c_<%=id%>">contents</a>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
554 </div>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
555 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
556 info.content()
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
557 end
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
558 end
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
559
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
560 return function()
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
561 Io.stdout = Http.response.text_writer()
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
562 %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
563 <!doctype html>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
564 <html>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
565 <head>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
566 <% head() %>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
567 <title>Reactionary BeanShell Tutorial</title>
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
568 </head>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
569 <body>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
570 <% header() %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
571 <div content>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
572 <h1><a href="beanshell.html">Reactionary BeanShell Tutorial</a></h1>
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
573 <hr>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
574 <h2>Contents</h2>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
575 <div toc>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
576 <% show_toc(content) %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
577 </div>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
578 <hr>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
579 <% show_content(content,2) %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
580 </div>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
581 </body>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
582 </html>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
583 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
584 end