Czy istnieje coś takiego jak interaktywny tryb REPL w Pythonie, ale dla Javy?

92

Czy istnieje coś takiego jak interaktywny tryb REPL w Pythonie, ale dla Javy? Więc mogę na przykład wpisać InetAddress.getAllByName( localHostName )okno i natychmiast uzyskać wyniki, bez tego całego publicznego statycznego koszmaru void ()?

Yoni Roit
źródło

Odpowiedzi:

64

edytuj Od Java 9 istnieje JShell

Oryginalna odpowiedź następuje

Możesz także użyć Groovy Console . To interaktywna konsola, na której możesz robić, co chcesz. Ponieważ Groovy zawiera również klasy z podstawowej platformy java, będziesz mógł również z nich korzystać.

To wygląda tak:

Zrzut ekranu Groovy

OscarRyz
źródło
Zrzut ekranu nie istnieje już w usłudze imageshack.
Co znajduje się w szczególnie miły o konsoli porywające jest to, że dużo więcej pakiety są importowane domyślnie, więc nie trzeba pisać tak wiele instrukcje importu (np java.util. *)
Donal
2
Dla tych, którzy są zbyt leniwi, aby zainstalować Groovy, dostępna jest wersja online tej konsoli: groovyconsole.appspot.com . Niektóre biblioteki JDK są niedostępne (np. I / O i System.exit()), ale do większości zastosowań powinno być wystarczające.
Dónal
To nie akceptuje zajęć, czy to normalne? class test{public static void test(){System.out.println('test')}}
Lime
52

Eclipse ma do tego funkcję, chociaż nie jest to pętla. Nazywa się to „stroną w notatniku”. Zakładam, że analogią jest to, że masz album z wycinkami, w którym zbierasz małe fragmenty kodu.

W każdym razie, aby to zadziałało, otwórz projekt w Eclipse (Twoja strona w notatniku będzie powiązana z projektem - Eclipse lubi to, gdy projekty są właścicielami rzeczy).

Następnie:

  1. W oknie nawigatora projektu wybierz folder, który istnieje gdzieś w projekcie.
  2. Wybierz menu Plik -> Nowy -> Inne lub naciśnij Control-N.
  3. Wybierz Java -> Java Run / Debug -> Scrapbook Page.
  4. Kliknij „Dalej”, nadaj mu nazwę pliku, a następnie naciśnij „Zakończ”.

Masz teraz stronę z notatnikiem. Wpisz kod, na przykład ten:

System.out.println(System.getProperties());

Następnie zaznacz tekst myszą i naciśnij Control-U lub wybierz „Wykonaj” z menu kontekstowego. Kod zostanie uruchomiony, a dane wyjściowe pojawią się na konsoli.

Możesz także wpisać wyrażenie, zaznaczyć je i wybrać Wyświetl z menu kontekstowego. Oceni wyrażenie i wypisze jego typ. Na przykład, uruchomienie Display on 1 + 2spowoduje wydrukowanie (int) 3.


źródło
1
Dziękuję za to. Beanshell mijał czas na powitanie, ale to działa idealnie.
Bayard Randel
3
Używam Eclipse od tak dawna, ale nie wiedziałem o tym, dzięki!
Tobold
28

BeanShell to mały, darmowy, wbudowywalny interpreter kodu źródłowego Java z funkcjami obiektowego języka skryptowego, napisany w języku Java. BeanShell dynamicznie wykonuje standardową składnię Java i rozszerza ją o typowe udogodnienia skryptowe, takie jak luźne typy, polecenia i zamknięcia metod, takie jak w Perlu i JavaScript. Możesz używać BeanShell w sposób interaktywny do eksperymentowania i debugowania języka Java, a także do rozszerzania aplikacji na nowe sposoby. Skrypty Java nadaje się do wielu różnych aplikacji, w tym do szybkiego prototypowania, rozszerzenia skryptów użytkownika, silników reguł, konfiguracji, testowania, dynamicznego wdrażania, systemów wbudowanych, a nawet edukacji w języku Java.

http://www.beanshell.org/

http://www.beanshell.org/manual/syntax.html#Standard_Java_Syntax

bakkal
źródło
Istnieją również interaktywne powłoki Jython i JRuby dla mniej rozwlekłych składni.
bakkal
1
BeanShell jest aktywnie utrzymywany jako BeanShell 2 - code.google.com/p/beanshell2
hshib
Prosty przykład uruchomienia programu behell z wiersza poleceń można znaleźć tutaj
Brad Parks
@hshib: Jest teraz na Github, a ostatnie zatwierdzenie pochodzi z 2013. To nie jest „aktywnie utrzymywane”.
Martin Schröder
@ MartinSchröder, ten komentarz BYŁ w 2013 roku :-)
hshib
19

Możesz używać stron Eclipse Scrapbook.

W Eclipse utwórz stronę w notatniku. W Twoim projekcie, New-> Other-> Scrapbook page.

W pliku wprowadź tekst, zaznacz go i naciśnij ctrl-U i gotowe.

Aby zarządzać importami, kliknij prawym przyciskiem myszy na stronie i wybierz opcję Ustaw import, gdzie możesz wybrać import pakietu lub pojedynczej klasy. Jest to trwałe i zapisywane wraz ze stroną.

Matthew Farwell
źródło
3
Choć może to być przydatne, strona w notatniku nie jest trwałą sesją, więc nie działa zbyt dobrze jako REPL.
MHarris
19

Stare pytanie, ale teraz jest lepsza odpowiedź (maj 2013) - java-REPL! Jest dostępny na github, a także dostępny na żywo w witrynie java-repl celu szybkiego jednorazowego przetestowania.

Jeśli pobierzesz kod centrum git i uruchomisz, antaby wygenerować artefakty, możesz ułatwić korzystanie z małego skryptu, takiego jak:

#!/bin/sh
java -jar /home/rdahlgren/scripts/javarepl-dev.build.jar

Odkąd znalazłem ten projekt, prawdopodobnie używam go 5 razy dziennie. Cieszyć się!

Ron Dahlgren
źródło
Wydaje się, że odsyłacz do odpowiedzi online brzmi teraz javarepl.com/term.html, a stary odsyłacz pokazuje tylko błędy Javy.
Tony
13

Wydaje się, że nikt jeszcze nie wspomniał, że Java (6, 7) dostarcza konsolę REPL o nazwie jrunscript. Jest niezależny od języka (więc może być używany z Jythonem, JRuby itp.). Domyślnie jest to JavaScript (Rhino), który również jest domyślnie dołączony i podobnie jak inne języki, możesz uzyskać dostęp do wszystkich pakietów / obiektów dostępnych w ścieżce klas.

user268396
źródło
11

Jako alternatywę dla Groovy, wypróbuj Beanshell: http://www.beanshell.org/

Jest bardziej podobny do języka Java i umożliwia bezpośrednie użycie składni języka Java.

Tim Jansen
źródło
czy fasola jest już utrzymywana?
rogerdpack
1
BeanShell jest aktywnie utrzymywany jako BeanShell 2 - code.google.com/p/beanshell2
hshib
@hshib: Nie. Ostatnie zatwierdzenie na githubie pochodzi z 2013 roku.
Martin Schröder
11

Jython to implementacja języka Python, która umożliwia inspekcję obiektów Java i interakcję z nimi.

>>> from java.net import *
>>> InetAddress.getAllByName("google.com")
array(java.net.InetAddress,[google.com/209.85.171.100, 
                            google.com/74.125.45.100,
                            google.com/74.125.67.100])
zwodniczy głupiec
źródło
8

Clojure zapewnia REPL, którego możesz użyć.

Ande Turner
źródło
7

Konsoli Groovy pozwala to zrobić. Właściwie miał na celu przetestowanie świetnego kodu, ale ponieważ groovy jest nadzbiorem Javy, pozwala również na zwykłe rzeczy w Javie.

Właśnie wpisałem to w konsoli:

InetAddress.getAllByName('localhost')

i naciśnij CTRL-R, po czym zwróciło:

groovy> InetAddress.getAllByName('localhost')

Result: [localhost/127.0.0.1]
Ole
źródło
7

Scala oferuje również konsolę interaktywną. Udało mi się go użyć, aby uzyskać wynik dla wyrażenia w twoim pytaniu, w pełni kwalifikując InetAddress, jak w:

java.net.InetAddress.getAllByName("localhost")
joel.neely
źródło
6

Podczas gdy JRuby , BeanShell , Julian Fleischer's REPL są dostępne , REPL Alberta Latacza wydaje się być najnowszym i aktywnym.

Wypróbowałem to z prostą definicją klasy, działa dobrze.

$ java -jar javarepl.jar
Welcome to JavaREPL version 56 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_17)
Type in expression to evaluate.
Type :help for more options.

java> public class Test {
    | public static void execute(String [] s) {
    |  System.out.println(54353 + s[0]);
    | }}

java> Test.execute(new String [] {"234343"});
54353234343

java> System.exit(0);
sandeepkunkunuru
źródło
3

Dla osób z dostępem do Mathematica JLink umożliwia dostęp do języka Java i skryptu z kodem Mathematica:

Needs["JLink`"]
LoadJavaClass["java.net.InetAddress"]
InetAddress`getAllByName["localhost"]

Naciśnij Shift-Enter, aby ocenić, a otrzymasz

{<<JavaObject[java.net.Inet4Address>>}

Następnie możesz użyć funkcji Map Mathematica do wywołania toStringzwróconych obiektów:

#@toString[]& /@ %

aby uzyskać wynik (lub użyć mniej niejasnej składni Map[Function[obj, obj@toString[]], %]):

{"localhost/127.0.0.1"}

Jeśli zaczniesz traktować to poważnie, zechcesz przeczytać samouczek Todda Gayleya pod adresem http://reference.wolfram.com/mathematica/JLink/tutorial/Overview.html .

jfklein
źródło
2

Jeśli znasz już Groovy (co zakładam, że znasz, ponieważ wspomniałeś o Groovy Console), po prostu użyj groovysh lub groovyConsole, które są zawarte w dystrybucji Groovy. Jeśli masz niestandardowe pliki JAR, które chcesz zaimportować, możesz napisać plik wsadowy, który uruchamia groovysh / groovyConsole z tymi dodanymi do ścieżki klas. Ty też możesz to zrobić

this.class.classLoader.rootLoader.addURL(new URL("file:///path to file"))

z wnętrza powłoki, aby załadować inne słoiki.

Kilka lat temu używałem Jythona, aby robić to, o co prosisz. W ramach mojego skryptu kompilacji wygenerowałem niestandardowy plik jython.bat i .py, który zawierał pełną ścieżkę klasy dla projektu, nad którym pracowałem. W ten sposób, kiedy zacząłem Jython, miałby dostępny cały kod i wywołałby Spring, który pozwoliłby mi kręcić rzeczy w systemie na żywo. Możesz zrobić to samo z Groovy, JRuby, BeanShell itp.

Joey Gibson
źródło
Wiem, że mógłbym użyć groovy shell, ale Groovy nie ma dokładnie takiej samej semantyki jak Java i nie ma sprawdzania typów. Jest więc możliwe, że mogłem uzyskać błędy kompilacji lub inne zachowanie w czasie wykonywania z fragmentem kodu Java, który wydawał się działać w powłoce Groovy.
Dónal
groovy załaduje również całą bibliotekę do ~ / .groovy / lib, możesz albo skopiować tam rzeczy, albo użyć dowiązań symbolicznych
Jason
1

Większość IDE ma okno zwane czymś w rodzaju „trybu natychmiastowego”, które pozwala na ocenę kodu java w locie.

krosenvold
źródło
Eclipse ma widok „wyświetlania”, który jest zbliżony do tego, czego chcę. Problem w tym, że musi to być związane z uruchomioną aplikacją. Muszę uruchomić aplikację, zatrzymać się na punkcie przerwania i dopiero wtedy mogę wpisać, co chcę.
Yoni Roit
@YoniRoit IMHO Lubię "wyświetlanie" + tryb debugowania lepiej niż REPL z wiersza poleceń. Dawno temu używałem REPL w / Python, więc zrobiłem jedno i drugie. Myślę, że znacznie lepiej jest napisać test jednostkowy i umieścić punkt przerwania i bawić się pożądanym kontekstem podczas wklejania dowolnego kodu działającego z powrotem do testu jednostkowego. Uzyskanie dokładnego kontekstu w zwykłym REPL jest znacznie trudniejsze niż powiedzmy test jednostkowy.
Adam Gent
1

Możesz rzucić okiem na BlueJ, które jest interaktywnym środowiskiem programistycznym Java przeznaczonym do nauczania OOP, a nie jako pełne IDE, takie jak Eclipse lub NetBeans. Zresztą fajnie jest się z tym bawić.

Możesz zobaczyć to w akcji na YouTube w serii samouczków Java.

Trevor Tippins
źródło
to jest interesujące. Bluej jest jak repl. Niezbyt przydatne w przypadku rzeczy, do których obecnie używasz repl, ale możesz użyć go do prototypowania swojego projektu oo, tak jak używałbyś repl do prototypowania metody.
Bill K
1

DrJava to edukacyjne IDE, które zawiera okienko REPL.

Jest też wtyczka Eclipse, ale nie zadziałała. Myślę, że od jakiegoś czasu nie był aktualizowany. Więc to, co zwykle robię, to pozostawienie otwartego okna DrJava na pytania „co się stanie, jeśli to zrobię”.

EclipseShell też może być dobry, ale jeszcze go nie używałem.

johncip
źródło
1

Skorupa fasoli 2

harishtella
źródło
Nie utrzymywane.
Martin Schröder
1

Istnieje proste środowisko IDE o nazwie DrJava, które ma konsolę interakcji. Działa dokładnie tak, jak bym się spodziewał. Wystarczy załadować plik i rozpocząć interakcję z zawartymi w nim obiektami.

dansalmo
źródło
1

JPad to brudnopis java z wbudowaną REPL:

C:\>jpad
       _ _____          _
      | |  __ \        | |
      | | |__) |_ _  __| |
  _   | |  ___/ _` |/ _` |
 | |__| | |  | (_| | (_| |
  \____/|_|   \__,_|\__,_|



Anything you type is evaluated as java.
The code is continuously appended until you call \clear.
Other Available Commands:
\exit - exit
\clear (n) - clear past java statements
\history - display all past java statements
\help - display this help

j>2+2
4
j>Math.sin(100.1)
-0.4177477
j>

Jest również sprytny w kwestii zrzucania kolekcji, list, map itp. I umożliwia renderowanie ich jako tabeli lub wykresu:

wprowadź opis obrazu tutaj

Ryan Hamilton
źródło
1

Java 9 zapewnia JShell.

jshell> println( "Print me!")
jshell> Print me!
Neha Gangwar
źródło
0

Jython, JIRB for JRuby, Groovy (groovyconsole i in.) I Beanshell to dostępne opcje.

Użyłem InteractiveConsoledla Jythona, naprawdę dobrze działało w aplikacji.

gpampara
źródło