3 ms·
It is probably because Java took this design philosophy (or I should say dogma) to heart as its very syntax and structure encourages to write code like that. On
by zelphirkalt 1y ago
It is probably because Java took this design philosophy (or I should say dogma) to heart as its very syntax and structure encourages to write code like that. One example: It does not have proper modules. Modules, the one thing that most people can agree upon that are a good thing, enabling modularity, literally. Another one: You cannot have simply a function in a module. Shit needs to be inside classes or mixed up with other unrelated concepts. Java the language encourages this kind of madness.
- pjmlp 1y agoIt is called packages. There is nothing on the modules as programming concept that requires the existence of functions as entity. Again, Smalltalk did it first, and is actually one of the languages on the famous GoF book, used to create all the OOP patterns people complain about, the other being C++.
- Supermancho 1y agoIn java, it has to be a class in a package. Packages are sane enough. That isnt the point.
- pjmlp 1y agoThat is the point, packages the Java programming language feature for the CS concept of modules. https://en.wikipedia.org/wiki/Modular_programming https://en.wikipedia.org/wiki/Modular_programming > Languages that formally support the module concept include Ada, ALGOL, BlitzMax, C++, C#, Clojure, COBOL, Common Lisp, D, Dart, eC, Erlang, Elixir, Elm, F, F#, Fortran, Go, Haskell, IBM/360 Assembler, IBM System/38 and AS/400 Control Language (CL), IBM RPG, Java, Julia, MATLAB, ML, Modula, Modula-2, Modula-3, Morpho, NEWP, Oberon, Oberon-2, Objective-C, OCaml, several Pascal derivatives (Component Pascal, Object Pascal, Turbo Pascal, UCSD Pascal), Perl, PHP, PL/I, PureBasic, Python, R, Ruby,[4] Rust, JavaScript,[5] Visual Basic (.NET) and WebDNA. If the whole complaint is that you cannot have a bare bones function outside of a class, Java is not alone. Predating Java by several decades, Smalltalk, StrongTalk, SELF, Eiffel, Sather, BETA. And naturally lets not forget C#, that came after Java.
- zelphirkalt 1y ago> There is nothing on the modules as programming concept that requires the existence of functions as entity. I didn't claim it does. To make the point though: bare functions are a much simpler building block, and a much cleaner building block than classes. Classes by their nature put state and behavior in one place. If one doesn't need that, then a class is actually not the right concept to go for (assuming one has the choice, which one doesn't in Java). A few constants and a bunch of functions would be a simpler and fully sufficient concept in that case. And how does one group those? Well, a module. In Java you are basically forced to make unnecessary classes, that only have static functions as members, to achieve a similar simplicity, but then you still got that ugly class thing thrown in unnecessarily. In a few other languages maybe things are based on different things than functions. Like words in Forth or something. But even they can be interpreted to be functions, with a few implicit arguments. And you can just write them down. No need to put them into some class or some blabliblub concept.
- pjmlp 1y agoFrom type systems theory point of view, a class is an extensible module that can be used as a variable. As mentioned in another reply, Java did not invent this, it was building upon Smalltalk and SELF, with a little bit of Objective-C on the side, and C++ like syntax. Try to create a single function in Smalltalk, or SELF. http://stephane.ducasse.free.fr/FreeBooks.html http://stephane.ducasse.free.fr/FreeBooks.html https://www.strongtalk.org/ https://www.strongtalk.org/ https://selflanguage.org/ https://selflanguage.org/ It is also no accident that when Java came into the scene, some big Smalltalk names like IBM, one day of the other easily migrated their Smalltalk tooling into Java, and to this day Eclipse still has the same object browser as any Smalltalk environment. Smalltalk, https://www.researchgate.net/figure/The-Smalltalk-browser-showing-abstract-classes-and-required-methods-In-the-method-list_fig1_220139628 https://www.researchgate.net/figure/The-Smalltalk-browser-sh... Which you will find a certain similarity including with NeXTSTEP navigation tools, and eventually OS X Finder, The code browser in Eclipse https://i.sstatic.net/4OFEM.png https://i.sstatic.net/4OFEM.png By the way, in OOP languages like Python, even functions are objects, Python 3.14.0 (tags/v3.14.0:ebf955d, Oct 7 2025, 10:15:03) [MSC v.1944 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> def sum(x, y): return x + y ... >>> sum <function sum at 0x0000017A9778D4E0> >>> dir(sum) ['__annotate__', '__annotations__', '__builtins__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__getstate__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__type_params__'] >>> type(sum) <class 'function'> >>> sum.__name__ 'sum' >>> sum.__class__ <class 'function'>