annotate src/beanshell.html.luan @ 87:5f4cc9d3d3cb

start beanshell
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 21 Apr 2025 21:47:15 -0600
parents src/learn_bash.html.luan@88f46d75d28e
children f320d444face
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
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
28 bsh-2.0b4.jar bsh.sh*
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
29 ~/beanshell $ cat bsh.sh
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
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
37 <p>Copy my <code>bsh.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>
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>
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
42 ~/beanshell $ ./bsh.sh
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
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
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.</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
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
156 <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 }
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
166 }
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
167
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
168
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
169 local function show_toc(content)
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
170 %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
171 <ul>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
172 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
173 for id, info in pairs(content) do
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
174 %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
175 <li><a id="c_<%=id%>" href="#<%=id%>"><%=info.title%></a></li>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
176 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
177 end
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
178 %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
179 </ul>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
180 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
181 end
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
182
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
183 local function show_content(content,h)
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
184 for id, info in pairs(content) do
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
185 %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
186 <div heading>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
187 <h<%=h%>><a id="<%=id%>" href="#<%=id%>"><%=info.title%></a></h<%=h%>>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
188 <a href="#c_<%=id%>">contents</a>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
189 </div>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
190 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
191 info.content()
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
192 end
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
193 end
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
194
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
195 return function()
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
196 Io.stdout = Http.response.text_writer()
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
197 %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
198 <!doctype html>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
199 <html>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
200 <head>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
201 <% head() %>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
202 <title>Reactionary BeanShell Tutorial</title>
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
203 </head>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
204 <body>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
205 <% header() %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
206 <div content>
87
5f4cc9d3d3cb start beanshell
Franklin Schmidt <fschmidt@gmail.com>
parents: 76
diff changeset
207 <h1><a href="beanshell.html">Reactionary BeanShell Tutorial</a></h1>
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
208 <hr>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
209 <h2>Contents</h2>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
210 <div toc>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
211 <% show_toc(content) %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
212 </div>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
213 <hr>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
214 <% show_content(content,2) %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
215 </div>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
216 </body>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
217 </html>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
218 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
219 end